GIF文件资料格式详解.docx

上传人:b****6 文档编号:3032682 上传时间:2022-11-17 格式:DOCX 页数:15 大小:123.66KB
下载 相关 举报
GIF文件资料格式详解.docx_第1页
第1页 / 共15页
GIF文件资料格式详解.docx_第2页
第2页 / 共15页
GIF文件资料格式详解.docx_第3页
第3页 / 共15页
GIF文件资料格式详解.docx_第4页
第4页 / 共15页
GIF文件资料格式详解.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

GIF文件资料格式详解.docx

《GIF文件资料格式详解.docx》由会员分享,可在线阅读,更多相关《GIF文件资料格式详解.docx(15页珍藏版)》请在冰豆网上搜索。

GIF文件资料格式详解.docx

GIF文件资料格式详解

GIF文件格式详解

简介

GIF(GraphicsInterchangeFormat)是puServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进展了扩大,扩大后的版本号定义为GIF89a。

GIF图像文件以数据块(block)为单位来存储图像的相关信息。

一个GIF文件由表示图形/图像的数据块、数据子块以与显示图形/图像的控制信息块组成,称为GIF数据流(DataStream)。

数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件完毕块(Trailer)之间。

GIF文件格式采用了LZW(Lempel-ZivWalch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。

此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。

如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。

.文件结构

GIF文件结构的典型结构如图6-01所示。

为下文说明方便,在构件左边加了编号。

图6-01GIF文件结构

数据块可分成3类:

控制块(ControlBlock),图形描绘块(Graphic-RenderingBlock)和专用块(SpecialPurposeBlock)。

(1)控制块:

控制块包含有用来控制数据流(DataStream)或者设置硬件参数的信息,其成员包括:

GIF文件头(Header)

逻辑屏幕描述块(LogicalScreenDescriptor)

图形控制扩展块(GraphicControlExtension)

文件完毕块(Trailer)

(2)图形描绘块:

包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:

图像描述块(ImageDescriptor)

无格式文本扩展块(PlainTextExtension)

全局调色板、局部调色板、图像压缩数据和图像说明扩大块。

(3)特殊用途数据块;包含有与图像处理无关的信息,其成员包括:

注释扩展块(mentExtension)

应用扩展块(ApplicationExtension)

除了在控制块中的逻辑屏幕描述块(LogicalScreenDescriptor)和全局彩色表(GlobalColorTable)的作用X围是整个数据流(DataStream)之外,所有其他控制块仅跟在它们后面的图形描绘块。

构件详解

1.GIF文件头

文件头描述块(Header)定义GIF数据流(GIFDataStream),它的结构如图6-02所示。

文件头描述块(Header)由GIF标记域(Signature)和版本号(Version)域组成,是一个由6个固定字节组成的数据块,它们用来说明使用的文件格式是GIF格式与当前所用的版本号。

GIF标记域(Signature)存放的是“GIF〞,版本号域存放的是1987年5月发布的“87a〞或者1989年7月发布的“89a〞,或者更加新的版本号。

图6-02标记/版本数据块的结构

typedefstructgifheader

    {

       BYTEbySignature[3];

       BYTEbyVersion[3];

    }   GIFHEADER;

2.逻辑屏幕描述块

逻辑屏幕描述块(LogicalScreenDescriptor)包含定义图像显示区域的参数,包括背景颜色信息。

这个数据块中的坐标相对于虚拟屏幕的左上角,不一定是指显示屏的绝对坐标,这就意味可以参照窗口软件环境下的窗口坐标或者打印机坐标来设计图像显示程序。

逻辑屏幕描述块的结构如图6-03所示:

图6-03屏幕描述块的结构

typedefstructgifscrdesc

    {

       WORDwWidth;

       WORDwDepth;

       structglobalflag

          {

             BYTEPalBits    :

3;

             BYTESortFlag   :

1;

             BYTEColorRes   :

3;

             BYTEGlobalPal:

1;

          }   GlobalFlag;

       BYTEbyBackground;

       BYTEbyAspect;

    }   GIFSCRDESC;

逻辑描述块包含7个字节。

字节0和字节1用来说明逻辑显示屏的宽度,字节2和字节3用来说明逻辑显示屏的高度,字节4用来描述彩色表的属性,字节5用来指定背景颜色索引,字节6用来计算像素的宽高比。

现作如下说明:

(1)屏幕描述块中的第5个字节称为包装域(PackedFields),它的位结构如图6-04所示,它由4个子域组成:

①全局彩色表标志(GlobalColorTableFlag)域G用来说明是否有全局彩色表存在。

如果G=1,表示有一个全局彩色表(GlobalColorTable)将紧跟在这个逻辑屏幕描述块(LogicalScreenDescriptor)之后;这个标志也用来选择背景颜色索引(BackgroundColorIndex)。

如果G=1,背景颜色索引(BackgroundColorIndex)域中的值就用作背景颜色的索引。

②彩色分辨率(ColorResolution)域CR用来表示原始图像可用的每种基色的位数(实际值减1)。

这个位数表示整个调色板的大小,而不是这幅图像使用的实际的颜色数。

例如,如果该域的值CR=3,说明原始图像可用每个基色有4位的调色板来生成彩色图像。

③彩色表排序标志(SortFlag)域S用来表示全局彩色表(GlobalColorTable)中的颜色是否按重要性(或者称使用率)排序。

如果S=0,表示没有重要性排序;如果S=1表示最重要的颜色排在前。

这样做的目的是辅助颜色数比拟少的解码器能够选择最好的颜色子集,在这种情况下解码器就可选择彩色表中开始段的彩色来显示图像。

④全局彩色表大小(SizeofGlobalColorTable)域Size表示表示每个像素的位数,它用来计算全局彩色表(GlobalColorTable)中包含的字节数。

在全局彩色表标志(GlobalColorTableFlag)域G=0时就不需要计算,G=1时就要计算彩色表的大小,具体计算见下文的“3.全局彩色表〞。

图6-04逻辑屏幕描述块中的包装域结构

(2)屏幕描述块中的第6个字节是背景颜色索引(BackgroundColorIndex),它是彩色表的一个索引值,用来指定背景颜色。

如果全局彩色表标志(GlobalColorTableFlag)域G=0,这个域的值也设置为0。

(3)像素宽高比(PixelAspectRatio)域中的值是一个因数,是计算原始图像像素的宽高比的一个近似值。

如果该域的值X围为1~255,如果不等于0,宽高比的近似值按下式计算:

AspectRatio=(PixelAspectRatio+15)/64

像素宽高比(PixelAspectRatio)定义成像素的宽度与高度之比,比值的X围在4:

1~1:

4之间,其增量为1/64。

3.全局彩色表

由于一个GIF文件可以包含多幅彩色图像,每幅彩色图像也许都包含适合自身特点的彩色表,所以一个GIF文件可以有好几个彩色表。

但归纳起来只有两类:

全局彩色表(GlobalColorTable)或局部彩色表(LocalColorTable)。

全局彩色表可用于图像本身没有带彩色表的所有图像和无格式文本扩展块(PlainTextExtension),而局部彩色表只用于紧跟在它后面的一幅图像。

在处理全局彩色表和局部彩色表时需要注意下面一些规如此。

①如果GIF文件包含全局彩色表(GlobalColorTable),而且要显示的图像本身又带有局部彩色表,那末显示该幅彩色图像时就用它自己的彩色表,而不用全局彩色表。

在这种情况下,解码器就首先保存全局彩色表(GlobalColorTable),然后使用局部彩色表(LocalColorTable)来显示图像,最后再回复全局彩色表(GlobalColorTable)。

②全局彩色表(GlobalColorTable)和局部彩色表(LocalColorTable)都是可选择的。

由于这个原因,解码器最好要保存全局彩色表(GlobalColorTable),一直到出现另一个全局彩色表(GlobalColorTable)为止。

这样做之后,对于包含完全没有彩色表的一幅或者多幅彩色图像的GIF文件就可以使用最后保存的全局彩色表(GlobalColorTable)进展处理。

③如果同类型的图像能够使用一样的彩色表来显示,编码器就要尽可能使用一个全局彩色表(GlobalColorTable);如果没有彩色表可用,解码器就可以使用计算机系统提供的彩色表或者解码器自身的彩色表。

④全局彩色表(GlobalColorTable)存在与否由逻辑屏幕描述块(LogicalScreenDescriptor)中字节5的全局彩色表标志(GlobalColorTableFlag)域G的值确定。

如果存在,彩色表就紧跟在逻辑屏幕描述块(LogicalScreenDescriptor)之后。

彩色表的表项数目等于2(n+1),其中n=b2b1b0,每个表项由3个字节组成,分别代表R、G、B的相对强度,因此彩色表的字节数就等于3×2(n+1)。

彩色表的结构如图6-05所示。

图6-05彩色表结构

局部彩色表与全局彩色表有一样的存储格式。

4.图像描述块

GIF图像文件格式可包含数量不限的图像,而且也没有一个固定的存放顺序,仅用一个字节的图像分隔符(ImageSeparator)来判断是不是图像描述块。

每一幅图像都由一个图像描述块(ImageDescriptor)、可有可无的局部彩色表(LocalColorTable)和图像数据组成。

每幅图像必须要落在逻辑屏幕描述块(LogicalScreenDescriptor)中定义的逻辑屏(LogicalScreen)尺寸X围里。

图像描述块(ImageDescriptor)之前可以有一个或者多个控制块,例如图形控制扩展块(GraphicControlExtension),其后可以跟着一个局部彩色表(LocalColorTable)。

无论前后是否有各种数据块,图像描述块(ImageDescriptor)总是带有图像数据。

图像描述块(ImageDescriptor)的结构如图6-06所示。

图6-06图像描述块的结构

typedefstructgifimage

      {

         WORDwLeft;

         WORDwTop;

         WORDwWidth;

         WORDwDepth;

         structlocalflag

            {

               BYTEPalBits    :

3;

               BYTEReserved   :

2;

               BYTESortFlag   :

1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1