首页  编辑  

Gif

Tags: /超级猛料/Format.格式,单位/File.文件格式/   Date Created:

]、。·ˉˇ¨〃々—~‖…’”〕〉》」』〗】∶!"'),.:;?]` GIF(Graphics Interchange Format——图形交换格式)格式是目前最流行的图

形格式之一。它和其他的图形格式最大区别是GIF支持在一个文件中存储多副图形

,这就是我们能够制作GIF动画以及图形计数器的原因。GIF格式与硬件无关,可

以基于全彩色。虽然在一副图中GIF最多只允许256色,但这只是调色板的限制,

事实上我们可以从无限多的颜色中生成这个256色的调色板。 和大多数图形格式

一样,GIF文件为压缩的图形数据生成了一个表头。它记录了该图形文件的一些基

本信息。

GIF文件的表头格式如下:

0000H-0005H:GIF标识。前三个byte是“GIF”,后三个byte是版本号,单副图形

的版本号通常是“87a”。GIF动画的版本号通常是“89a”。

0006H-0009H:图形的宽度和高度,单位是像素。宽度和高度各用两个字节表示(

16位整数)。

000AH   :全局...标志(flag)。全局标志用来定义该图形的颜色数以及全局调色

板的信息。全局标志中的最高位(第八位)用来表示该图形文件是否存在一个全

局调色板(我在文章开头已经说过了,GIF允许在一个文件中存储多副图形,单个

图形所对应的调色板,我们称之为局部调色板,而相对于全体图形的调色板则称

之为全局调色板)。“1”代表有,“0”代表无。必须注意的是,由全局标志所

限定的全局调色板只是一个确省值,如果单个图形拥有自己的局部调色板,则全

局调色板失效。(通常情况下,单个图形不设局部调色板,确省的使用全局调色

板)。

全局标志的低三位+1就是该图形文件颜色以2为底数的指数值。例如,低三位为“

111”则表明本文件的全局调色板包括256种颜色;低三位为000则表明是全局调色

板只包括两种颜色。依此类推。这里所限定的颜色数作用于该文件中的所有图形

(全局数据)。

000BH  :背景颜色。这里定义了该文件中图形的背景颜色。需要指出的是,这

里的颜色值是相对于调色板的值。也就是说,“1”代表调色板中的第一种颜色

。如果等于零,则说明图形为透明。

000CH  :等于零。如果不等于零,则说明文件有错。

000DH  :如果全局标志中指明存在全局调色板,那么该调色板就从这里开始。

调色板的格式是标准的RGB格式,每个颜色用三个Byte表示,分别对应红绿蓝三

色的百分比。

全局数据结束。

在全局数据之后的剩余数据就是相互独立的数据块了。

每个数据块的第一个Byte用来说明该数据块的类型。“,”表示该数据块是图形数

据;“!”表明这是一个扩充块(这是GIF留给用户进行扩充定义的,很少。在程

序中通常忽略这类数据块);“;”表示全部数据结束,这是文件的结尾。

主要说明一下以“,”开头的图形数据块。每一个以“,”开头的图形数据块都意

味着一个独立的图形。它也分做表头和数据两部分。表头格式如下(为方便表示

,以下地址以局部图形数据块第一字节为相对0000H):

0000H:“,”;

0001H-0002H:左边界;

0003H-0004H:上边界;

0005H-0006H:宽度;

0007H-0008H:高度;

注意,以上数值均为图形全局尺寸的相对位置。

0009H   :局部标志位。局部标志位格式于用途基本上和全局标志相同。只是

它的作用域为单个图形,因此所限定的调色板为局部调色板。还需要注意的是这

个Byte的第七位,它用来表明该图形是否使用隔行扫描。“1”表示隔行,“0”

表示不隔行。

如果是图形定义为不隔行扫描,则未压缩的数据与物理屏幕一一对应。如果定义

为隔行扫描,则未压缩数据的获得要相对复杂些。这将在例程中讨论。

000AH  :如果局部标志位定义了局部调色板,则从这里开始。如果没有,就是

正式的图形数据的第一个Byte了。

图形数据采用LZW技术压缩。我们将再晚些时候的“GIF图形的生成与还原(二)

” 中专门论述。