GIF文件的数据结构以及播放和分解GIF的源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GIF文件的数据结构以及播放和分解GIF的源代码
GIF 文件内部是按块划分的,包括控制块和数据块两种。控制块控制数据块的行为,不同的控制块
包含不同的控制参数。数据块只包含一些8bit的字符流,由它前面的控制块来决定它的功能,每个数据
块0—255个字节,数据块的第一个字节指出这个数据块长度(字节数),计算数据块的长度时不包括这
个字节,所以一个空的数据块也有一个字节,那就是数据块的大小&H00。
控制块中的逻辑屏幕描述块和全局彩色表的作用范围是整个数据流, 其他控制块仅控制跟在它们后
面的图形描述块。
GIF文件的典型结构如下表所示。
---------------------------------------
顺号结构名称长度(字节)
---------------------------------------
1GIF文件头 6
2逻辑屏幕描述块7
3全局彩色表≤768
4图形描述块10
5局部彩色表(可重复n次)≤768
6表式压缩图像数据
7图像控制扩展块8
8无格式文本扩展块
9注释扩展块4-258
10 应用程序扩展块
11 GIF文件结束块 1
----------------------------------------
一、控制块
1. GIF文件头
文件头由6个固定字节组成,结构如下表所示。
单位:字节
---------------------
偏移量长度域名称
---------------------
03GIF标记
33版本号
---------------------
GIF标记存放的是“GIF”的Ascii码,版本号存放的是1987年5月发布的“87a”或者1989年7月发布
的“89a”,或者更加新的版本号。
2. 逻辑屏幕描述块
逻辑屏幕描述块紧跟在GIF文件头之后。
逻辑屏幕描述块由7个固定字节组成,包含定义图像显示区域的参数,包括背景颜色信息。这个数
据块中的坐标相对于虚拟屏幕的左上角,不一定是指显示屏幕的绝对坐标。逻辑屏幕描述块的结构如下
表所示:
单位:字节
--------------------------------
偏移量长度域名称
--------------------------------
62逻辑屏幕宽度(像素)
82逻辑屏幕高度(像素)
101包装域
111背景颜色索引
12 1像素宽高比
--------------------------------
说明:
(1) 包装域是描述彩色表属性的,这一个字节又由4个子域组成:
0-2位:全局彩色表大小域Size,表示表示每个像素的位数,它用来计算全局彩色表中包含的
字节数。在全局彩色表标志域G=0 时就不需要计算,G=1 时就要计算彩色表的大小,具体计算见下
文的"3. 全局彩色表"。
3位:彩色表排序标志域S,用来表示全局彩色表中的颜色是否按重要性(或者称使用率)排序。
如果S=0,表示没有重要性排序;如果S=1 表示最重要的颜色排在前。这样做的目的是辅助颜色数
比较少的解码器能够选择最好的颜色子集,在这种情况下解码器就可选择彩色表中开始段的彩色来显示
图像。
4-6位:彩色分辨率域CR,用来表示原始图像可用的每种基色的位数(实际值减1)。这个位数表示
整个调色板的大小,而不是这幅图像使用的实际的颜色数。例如,如果该域的值CR=3,说明原始图像
可用每个基色有4位的调色板来生成彩色图像。
7位:全局彩色表标志域G 用来说明是否有全局彩色表存在。如果G=1,表示有一个全局彩色表将
紧跟在这个逻辑屏幕描述块之后;这个标志也用来选择背景颜色索引,如果G =1,背景颜色索引域中的
值就用作背景颜色的索引。
(2)背景颜色索引是彩色表的一个索引值,用来指定背景颜色。如果全局彩色表标志域G=0,这个
域的值也设置为0。
(3) 像素宽高比域中的值是一个因数,是计算原始图像像素的宽高比的一个近似值。如果该域的值
范围为1~255,宽高比的近似值按下式计算:
Aspect Ratio = (Pixel Aspect Ratio + 15) / 64
比值的范围在4:1~1:4之间,其增量为1/64。
3. GIF文件结束块
结束块在GIF文件的最后,它是一个固定的数值&H3B。
4、扩展控制块
这一部分是可选的(需要89a版本),扩展控制块的标记是&H21(又称扩展导入符),用于识别扩
展块的开始。在扩展导入符后是扩展标签。
①图形控制扩展块用来控制跟在它后面的第一个图象(或文本)的渲染形式,扩展标签为&HF9,其结构
如下表所示:
单位:字节
------------------------------------------
偏移量长度域名称
------------------------------------------
01扩展导入符(&H21)
11图形控制标签(&HF9)
21块大小域(&H04)
31包装域
42延迟时间
61透明色索引
71块结束符(&H00)
------------------------------------------
说明:
(1)块大小域用来说明该扩展块所包含字节数,该字节数是从块大小域之后到块结束符之前的字节
数,固定为&H4。
(2)包装域的结构如下表所示:
0位:透明标志
1位:用户输入标志,表示在继续处理之前是否需要用户输入(按回车键或鼠标点击等)。在延时
时间和用户输入标志都设置为1的情况下,继续处理的开始时间取决于用户响应输入在前还是延迟时间
结束在前。
2-4位:处理方法,处理方法规定图形显示之后译码器要用下表所述方法进行处理:
--------------------------------------
域值方法
--------------------------------------
0不使用处理方法
1不处理图形,图形留在原处
2显示图形的区域必须恢复成背景颜色
3恢复成以前显示的图形
4-7未定义
--------------------------------------
5-7位:保留的
(3)延迟时间:单位1/100秒,如果值不为1,表示暂停规定的时间后再继续往下处理数据流。
(4)透明色索引:当透明标志位设置为1时,透明索引指示处理程序要修改