发信人: doomster()
整理人: gzbigegg(1999-11-24 10:08:34), 站内信件
|
发信人: wokao (wokao), 信区: C 标 题: I have nothing to,but past GIF head format(from [email protected]) 发信站: 网易虚拟社区 (Tue Apr 13 22:12:31 1999), 转信
主 题:GIF图形的生成与还原(一)GIF的表头格式 返回新浪网GIF图形的生 成与还原(一)GIF的表头格式 最后,恳请您能够将所有对本文的修改寄达本人。EMail:[email protected]
我们写本文的目的是因为前两天先有人在论坛里问到这个问题(忘了是在Tom那 里,还是在新浪),后又有朋友来电话说想给网页做个图形计数器不知道如何生 成GIF图形。而这显然不是一两句话所能说明的,因此决定把一些经验写下来 供 大家参考指正。 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图形的生成与还原(二) ” 中专门论述。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.101.254]
-- ******************************************************* X .........开开心心唱支歌........ X X ...........我爱一只小鸭子,伊呀,伊呀哟........... X X http://sheila98.yeah.net X *******************************************************
※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.99.63.28]
|
|