代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

将GIF拆分为帧

  •  14
  • Seva Alekseyev  · 技术社区  · 16 年前

    尝试在Android上播放动画GIF(参见 Android: How do a display a large animated gif given a url? ). 一点也不顺利。在Android 1.5上,Movie.decodeStream()/decodeFile()返回空值。在android1.6上,使用我得到的GIF文件,它返回一个大小为零、持续时间为零的电影-显然不够。

    编辑:尝试在Windows中用GNU giflib打开我的一个gif。它在第一帧就窒息了。GIF本身是可以的,所有浏览器(除了Android)都可以很好的显示和动画效果。

    EDIT2:使用giflib 4.1.4。不知道4.1.6中有什么坏掉了,但你知道了。下一步:通过NDK为Android构建giflib,以某种方式与Bitmap类集成。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Seva Alekseyev    6 年前

    编辑:我已将我的项目迁移到 Google GifFileDecoder

    几点兴趣: GifFileDecoder readFrame() readFrame() 返回值被反复使用,所以不要按原样存储readFrame的结果,下次调用readFrame时,它将被覆盖。做一个深拷贝。而且,解码器假设从文件读取,但是可以简单地修改为从任何其他流读取,从而牺牲循环逻辑。

    giflib 4.1.4和NDK。您必须手动解析GIF中的调色板颜色,以匹配Android的ARGBxxxx格式之一,然后将像素数组传递给 Bitmap 对象通过 copyPixelsFromBuffer() . 如果您想要透明和/或动画,则必须遍历扩展块并查找代码为0xf9的扩展块。

    http://rathertech.blogspot.com/2014/04/splitting-gif-into-frames-on-android.html