试图在Android上播放动画GIF(请参阅Android:如何显示给定网址的大型动画GIF?).这不过是顺利的.在Android 1.5上,Movie.decodeStream()/ decodeFile()返回null.在Android 1.6上,使用我获得的GIF文件,它返回一个零大小的电影,持续时间为零 - 显然不够.
引用的问题建议将GIF分割成帧(然后渲染这些).请问我到底是怎么做到的?
编辑:尝试在Windows中使用GNU giflib打开我的一个GIF.它在第一帧窒息.GIF本身没问题,所有浏览器(保存Android的)显示和动画都很好.
EDIT2:使用giflib 4.1.4.不确定4.1.6中的内容是什么,但是你去了.下一步:通过NDK为Android构建giflib,以某种方式与Bitmap类集成.
EDIT3:它是giflib.与Bitmap.copyPixelsFromBuffer结合使用.颜色现在都是歪斜的,但基本设计似乎可行.
编辑:我已将我的项目迁移到Google GifFileDecoder,稍作修补。遗留解决方案中的 MovieView 类基本保持不变,但 GIF 解析逻辑是用 Java 编写的。
几个兴趣点:
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
| 归档时间: |
|
| 查看次数: |
5300 次 |
| 最近记录: |