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);
  • 相关阅读:
    django 在保存数据前进行数据校验
    itertools
    python 发送请求
    python 异常处理
    python 对redis 键值对的操作
    python 对redis key的基本操作
    python 操作redis数据
    一只青蛙一次可以跳1阶或者2阶,n阶,有多少种到达终点的方式。
    Django 自定义扩展命令
    关于函数可变参数
  • 原文地址:https://www.cnblogs.com/huizhang212/p/ImageGif.html
Copyright © 2011-2022 走看看