*.gif 解码 - 理论?我们知道Android 默认是不支持*.gif 的 但是又需要这些功能 怎么办? 继续之??其实 *.gi
*.gif 解码 - 理论
?
我们知道Android 默认是不支持*.gif 的 但是又需要这些功能 怎么办? 继续之
?
?
其实 *.gif 编码 解码 要详细说的话 估计1星期也说不出什么来 而且很快就会忘记 因为其组成也极其复杂 且没什么原因 所以 从国外anddev 淘来一份如何解码*.gif 的代码 现与诸位分析 看该代码 推荐与*.gif 解码 一起看 效果会更好的 否则 看完即忘 所以把*.gif 解码 也一起释放给大家
?
?
其实 如何解码*.gif并不是今天的重点 现在大概说下如何使用该接口
?
?
?
假设 该接口为:TypegifOpenHelper.java
?
?
[使用]
?
1. 创建TypegifOpenHelper
?
TypegifOpenHelper gHelper = new TypegifOpenHelper();
?
?
2. 现有gif文件:lion.gif 存放在 res\raw 目录
?
int id = R.raw.lion;gHelper.read(this.getResources().openRawResource(id));
?
?
3. 当然 以上仅仅是:从*gif中提取出所有Bitmap? 而现在要求是显示连贯动画 所以我们还需要开辟一个Thread 用于隔段时间通知View 刷新图片 显示下一张 如此不断循环
?
?
?
以上是理论部分 改天演示如何使用该接口 并以组件View的形式 供 *.java *.xml 中使用!!!!
?
?
1 楼 gryphone 2010-05-07 悲哀 似乎大家更关注应用开发 不关心其原理
牢骚一下 2 楼 goontosoon 2010-05-07 怎么没有人支持啊?不过我还是第一次知道android不支持gif,我以为无所不能呢 3 楼 yzhong_sa 2010-05-07 呵呵 这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。
另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮 自己写一个gif解码器就是了。 4 楼 gryphone 2010-05-08 yzhong_sa 写道呵呵 这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。
另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮 自己写一个gif解码器就是了。
基本原理是这样的 不过我的代码 效率处理的不太好 其实可以一边解码 一边播放 会更好一点 特别 *.gif 比较大时 差别会比较明显 你有研究过这个么? 5 楼 lishali12345 2010-05-09 由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵
6 楼 gryphone 2010-05-09 lishali12345 写道由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵
了解 没关系 至于你说的问题 应该不存在吧 因为目标是*.gif数据流 而不是pc 所以没有该必要 7 楼 lishali12345 2010-05-11 gryphone 写道lishali12345 写道由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵
了解 没关系 至于你说的问题 应该不存在吧 因为目标是*.gif数据流 而不是pc 所以没有该必要
我想知道的是*.gif文件中存储short值是以小端字节序存储的吗?这个是GIF文件格式中的明确标准吗?
因为如果只是从程序解析流的层面上来讲,是很有必要考虑大小端的问题呢,要不然结果肯定是错误的。
8 楼 jackhuny 2011-01-02 楼主的解码器很好用, 不过里面有个protected boolean transparency我把他设成True后解析出来的gif背景还是黑色的, 我在其他的gif编辑器里确认过背景确是是透明的. 不知道还有哪里需要修改的?