使用android底层库实现gif的播放

gif图片格式:
1.每一帧都是包含扩展块,(共4种扩展块)(控制当前帧的播放时间等)
2.像素数据
使用Handler 延时轮播 更新bitmap并在imgeView上显示

主要类:

    typedef struct GifFileType {
        GifWord SWidth, SHeight;         图片宽高
        ColorMapObject *SColorMap;       压缩字典
        int ImageCount;                  帧个数
        GifImageDesc Image;              图片的内容区信息
        SavedImage *SavedImages;         所有帧数据数组
        int ExtensionBlockCount;         扩展块个数
        ExtensionBlock *ExtensionBlocks; 扩展块数组 
        void *UserData;                  用户数据(当前帧,延时数组,总帧数)
        ....
    } GifFileType;

    typedef struct SavedImage {
        GifImageDesc ImageDesc;         内容区
        GifByteType *RasterBits;         lzw算法获取的像素
        int ExtensionBlockCount;         扩展块个数   
        ExtensionBlock *ExtensionBlocks; 扩展块数组 
    } SavedImage;
    
    typedef struct GifImageDesc {
        GifWord Left, Top, Width, Height;   内容区的边距
        ColorMapObject *ColorMap;           压缩字典
    } GifImageDesc;

实现步骤:
1.创建一个空的bitmap
2.更新bitmap数据并返回下一帧的延时时间(帧的图形控制块里有延时时间字段)
利用AndroidBitmap_lockPixels函数创建图片数据,然后内容区的每个像素,经过压缩后赋值。
3.利用Handler轮播更新bitmap数据并展示

你可能感兴趣的:(使用android底层库实现gif的播放)