发信人: huahai() 
整理人: jchao(1999-11-22 13:46:40), 站内信件
 | 
 
 
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.98.107.82]
  | 
 
 
 |