`
gryphone
  • 浏览: 433510 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

*.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 中使用!!!!

 

 

分享到:
评论
8 楼 jackhuny 2011-01-02  
楼主的解码器很好用, 不过里面有个protected boolean transparency我把他设成True后解析出来的gif背景还是黑色的, 我在其他的gif编辑器里确认过背景确是是透明的. 不知道还有哪里需要修改的?
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文件格式中的明确标准吗?
因为如果只是从程序解析流的层面上来讲,是很有必要考虑大小端的问题呢,要不然结果肯定是错误的。
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 所以没有该必要
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值的方法是一致的吗?
##############################
不好意思发到另一个帖子上了,希望楼主能看到。呵呵
4 楼 gryphone 2010-05-08  
yzhong_sa 写道
呵呵  这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。

另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮  自己写一个gif解码器就是了。

基本原理是这样的 不过我的代码 效率处理的不太好 其实可以一边解码 一边播放 会更好一点 特别 *.gif 比较大时 差别会比较明显 你有研究过这个么?
3 楼 yzhong_sa 2010-05-07  
呵呵  这个功能我一个月前完成了。。 只要按照gif的编码结构对文件进行解码,UI上自定义一个view,onDraw()方法画当前贞的bitmap,根据每一贞的delay控制一个线程去invalidate 就ok。。

另外 Android自带的Movie是可以播放gif的,但是如果图片太大,它可能加载不成功,或者播放时图像扭曲。不够健壮  自己写一个gif解码器就是了。
2 楼 goontosoon 2010-05-07  
怎么没有人支持啊?不过我还是第一次知道android不支持gif,我以为无所不能呢
1 楼 gryphone 2010-05-07  
悲哀 似乎大家更关注应用开发 不关心其原理
牢骚一下

相关推荐

    10,图片编解码_好用的图片编码器用于像素显示_

    总的来说,这些资料提供了从理论到实践的全面视角,涵盖了JPEG和其他图像编码格式的编解码技术,以及它们在各种硬件平台上的实现,包括嵌入式系统和多核处理器架构。通过深入学习这些材料,读者可以掌握数字图像处理...

    2022年理论题计算机.docx

    ### 2022年理论题计算机知识点解析 #### 单选题知识点解析 1. **冯·诺依曼结构的计算机五大部件** - 冯·诺依曼架构是现代计算机的基础架构之一,该架构将计算机划分为五个主要部分:运算器、控制器、存储器、...

    " data-report-query="utm_medium=distribute.pc_relevant_iteye_download.none-task-download-2~default~OPENSEARCH~Rate-3-142477-iteye_blog-657630.nonecase&depth_1-utm_source=distribute.pc_relevant_iteye_download.none-task-download-2~default~OPENSEARCH~Rate-3-142477-iteye_blog-657630.nonecase" data-report-click='{"mod":"popu_708","dest":"https://download.csdn.net/download/chenxh/142477","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_iteye_download.none-task-download-2~default~OPENSEARCH~Rate-3-142477-iteye_blog-657630.nonecase\"}"}' > MP3播放器 <img src="/images/sunny.gif" align="absmiddle">

    这个过程涉及到音频编码理论,如DCT(离散余弦变换)和熵编码等技术。 2. **回放**:解码后的音频样本经过数模转换(DAC),将数字信号转化为模拟信号,然后通过耳机或扬声器输出声音。此外,播放器通常还具备音量...

    Android音视频开发与处理.pdf

    例如,从视频中抽取帧并保存为图片,或者将图片合成GIF动画。 3. **码率**(Bitrate): - **码率**决定了视频文件的大小和画质。更高的码率意味着更好的画质,但也需要更多的存储空间。 - **码率类型**: - **...

    20个图片解码资料合集.rar

    在这个名为“20个图片解码资料合集.rar”的压缩包中,可能包含了一系列关于不同图片格式解码的教程、代码示例、理论文档以及可能的实验数据,旨在帮助用户深入理解这一技术。 1. **图片文件格式**:不同的图片格式...

    android-gif-analysis:android gif编解码的原始分析,附有博客进行讲解

    `GifDecoder`是GIF解码的核心类,它负责解析GIF文件中的数据块,包括图像描述、逻辑屏幕描述、图形控制扩展、局部颜色表等。在这个项目中,通过阅读和分析`GifDecoder`的源代码,我们可以深入理解以下关键知识点: ...

    压缩编解码算法

    在IT领域,压缩编解码算法是数据存储和传输中不可或缺的一部分,特别是在多媒体技术中,高效的数据压缩可以显著节省存储空间和带宽资源。LZW(Lempel-Ziv-Welch)编码是一种广泛使用的无损数据压缩算法,由Abraham ...

    多媒体创作与authorware试题和答案

    - **建构主义学习理论**:强调情境、协作、会话和意义建构,不包括情景。 7. **课件制作技巧**: - **变量与函数**:变量用于存储信息,函数则提供特定功能或计算,自定义函数可以扩展程序能力。 - **屏幕截取**...

    LZW_APP.zip

    它广泛应用于文本、图像和其他数据类型的压缩,尤其在早期的文件压缩软件如compress和GIF图像格式中被广泛应用。LZW编码的核心思想是通过查找和合并重复的字符串来减少数据量,从而达到压缩的目的。 **LZW编码原理*...

    专升本计算机多媒体模块试题

    14. **三原色理论**:理解三原色(红、绿、蓝,RGB)在颜色表示中的基础作用。 15. **数字音频质量**:了解音频质量与采样频率、量化位数和声道数的关系,采样频率越高、量化位数越多,音频质量越好。 16. **音频...

    《多媒体技术应用》模拟试题二.rar

    通过这份模拟试题,学习者可以深入了解并掌握这些关键知识点,提高在多媒体技术领域的理论知识和实践能力。同时,了解当前多媒体技术的发展趋势,如虚拟现实(VR)、增强现实(AR)、5G网络下的超高清视频等,也是...

    软考系分之计算机网络OSI七层模型概念、协议和作用

    常见的协议如JPEG用于图像压缩,GIF和PNG用于图形,MPEG用于视频,以及各种文本编码格式。 7. **应用层** - 应用层是OSI模型的最高层,直接与用户应用程序交互,提供诸如文件传输(FTP)、远程登录(TELNET)、...

    Flex加载GIF动画处理类

    这通常涉及到对GIF的二进制数据进行解码,包括解析头部信息、帧信息、颜色表等。 3. **第三方库**:为了解决AS3中的GIF播放问题,有多个开源库可以使用,如`giflib`、`as3gif`等。这些库提供了GIF解析和播放的功能...

    落日舞者.rar

    - **色彩理论**:理解色彩搭配和情绪表达对设计的影响。 5. 3D模型: - **3D软件**:如Blender、Maya、3ds Max等,用于创建三维模型和动画。 - **3D格式**:如OBJ、FBX、3DS等,用于在不同软件间交换模型数据。 ...

    霍夫曼编码

    - 与算术编码相比,霍夫曼编码的构建和解码过程相对简单,但算术编码在理论上的压缩效率更高。 总的来说,霍夫曼编码是数据压缩领域的重要工具,通过构造特定的二叉树,实现对数据的高效压缩。其核心思想在于根据...

    Lossless Compression Handbook

    ### 无损压缩手册知识点详解 ...总之,《无损压缩手册》提供了丰富的理论知识和实践经验,对于理解无损压缩的基本原理及其在各个领域的应用具有重要意义。无论是研究人员还是工程师,都能从中获得宝贵的见解和灵感。

    多媒体技术与应用实验报告

    通过这次实验,学生将不仅能够理论联系实际,还能培养解决问题的能力,为未来在多媒体领域的研究和工作打下坚实的基础。实验报告中会详细记录每个步骤的过程、遇到的问题及解决方案,以及对实验结果的分析和总结,...

    GifView.zip项目安卓应用源码下载

    3. **线程管理**:GIF解码通常在后台线程进行,以避免阻塞UI主线程。这可能涉及到`AsyncTask`或`Handler`的使用。 4. **生命周期管理**:在Android应用的生命周期中,需要适当地暂停和恢复GIF播放,以节省资源。...

    将gif分解为静态图片.rar

    总之,这个“将gif分解为静态图片”的项目涵盖了Qt库的图像处理、GIF解码、多格式转换和文件保存等多个知识点,对于提升C++程序员在图形处理领域的技能非常有帮助。通过学习和实践,开发者能够更好地理解和掌握这些...

Global site tag (gtag.js) - Google Analytics