zoukankan      html  css  js  c++  java
  • Windows Phone 解析图片尺寸之gif

      前面介绍了PNG和JPG图片的尺寸解析,Windows Phone是直接支持这两种图片的显示的,使用Image控件。而GIF图片需要用第三方开发的控件来显示,ImageTools是开源社区CodePlex提供的,可以通过http://imagetools.codeplex.com/下载DLL以及源码。
      引用ImageTools类库后,通过以下代码可以显示GIF图片。

    View Code
            //创建gif控件
    AnimatedImage gifImage = new AnimatedImage();
    Decoders.AddDecoder<GifDecoder>();
    //根据图片字节流加载图片
    ExtendedImage extendedImg = new ExtendedImage();
    GifDecoder dc = new GifDecoder();
    dc.Decode(extendedImg, stream);
    gifImage.Source = extendedImg;

      GIF图片的文件格式相对比较简单,其中宽度和高度信息存放在逻辑视屏描述块的前4个字节,而逻辑视屏描述块是GIF图片的第二块区域,第一个区域为6个字节的头部,头部包括标识符和版本。下表列出到高度信息为止的各个字节的描述。

    名称 字节 说明
    头部    
    标识符 3 GIF  47 49 46
    版本 3 87a(89a) 38 39|37 61
    逻辑视屏描述块    
    宽度 2  
    高度 2  

      根据上面的格式很容易获取图片的高度和宽度信息,具体代码如下。

    View Code
            //gif图片信息域(47 49 46 38 39|37 61) GIF89(7)a,共6字节
    //根据6字节判断是否为gif图片
    byte[] header = new byte[6];
    stream.Read(header, 0, 6);
    if (!(header[0] == 0x47 && // G
    header[1] == 0x49 && // I
    header[2] == 0x46 && // F
    header[3] == 0x38 && // 8
    (header[4] == 0x39 || // 9
    header[4] == 0x37) && // 7
    header[5] == 0x61)) // a
    {
    //不是GIF图片,退出
    return;
    }

    //读取宽度,高度 各2字节
    byte[] buffer = new byte[4];
    stream.Read(buffer, 0, buffer.Length);

    width_ = BitConverter.ToInt16(buffer, 0);
    height_ = BitConverter.ToInt16(buffer, 2);
  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/huizhang212/p/ImageGif.html
Copyright © 2011-2022 走看看