GIF文件的数据结构以及播放和分解GIF的源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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时,透明索引指示处理程序要修改

相关文档
最新文档