GIF文件资料格式详解Word格式.docx

上传人:b****1 文档编号:4458856 上传时间:2023-05-03 格式:DOCX 页数:14 大小:122.42KB
下载 相关 举报
GIF文件资料格式详解Word格式.docx_第1页
第1页 / 共14页
GIF文件资料格式详解Word格式.docx_第2页
第2页 / 共14页
GIF文件资料格式详解Word格式.docx_第3页
第3页 / 共14页
GIF文件资料格式详解Word格式.docx_第4页
第4页 / 共14页
GIF文件资料格式详解Word格式.docx_第5页
第5页 / 共14页
GIF文件资料格式详解Word格式.docx_第6页
第6页 / 共14页
GIF文件资料格式详解Word格式.docx_第7页
第7页 / 共14页
GIF文件资料格式详解Word格式.docx_第8页
第8页 / 共14页
GIF文件资料格式详解Word格式.docx_第9页
第9页 / 共14页
GIF文件资料格式详解Word格式.docx_第10页
第10页 / 共14页
GIF文件资料格式详解Word格式.docx_第11页
第11页 / 共14页
GIF文件资料格式详解Word格式.docx_第12页
第12页 / 共14页
GIF文件资料格式详解Word格式.docx_第13页
第13页 / 共14页
GIF文件资料格式详解Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

GIF文件资料格式详解Word格式.docx

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

GIF文件资料格式详解Word格式.docx

(3)特殊用途数据块;

包含有与图像处理无关的信息,其成员包括:

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

6.2.3构件详解

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 

BYTEGlobalPal:

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;

structlocalflag 

BYTEReserved 

2;

BYTEInterlace:

BYTELocalPal 

LocalFlag;

GIFIMAGE;

在图6-06中,图像分隔符(ImageSeparator)用来标识图像描述块的开始,该域包含固定的值:

0x2C;

图像左边位置(ImageLeftPosition)是相对于逻辑屏幕(LogicalScreen)最左边的列号,逻辑屏幕最左边的列号定义为0;

图像顶部位置(ImageTopPosition)是相对于逻辑屏幕(LogicalScreen)顶部的行号,逻辑屏幕顶部的行号定义为0。

图6-07图像描述块中的包装域结构

图像描述块(ImageDescriptor)中的第9个字节称为包装域(PackedFields)字节,它的位结构如图6-07所示,它由5个子域组成:

①局部彩色表标志(LocalColorTableFlag)域L用来说明是否有局部彩色表存在。

如果L=1,表示有一个局部彩色表(LocalColorTable)将紧跟在这个图像描述块(ImageDescriptor)之后;

如果G=0,表示图像描述块(ImageDescriptor)后面没有局部彩色表(LocalColorTable),该图像要使用全局彩色表(GlobalColorTable)。

②交插显示标志(InterlaceFlag)域I用来表示该图像是不是交插图像(InterlacedImages)。

如果I=0,表示该图像不是交插图像,如果I=1表示该图像是交插图像。

使用该位标志可知道图像数据是如何存放的。

GIF文件格式定义了两种数据存储方式:

一种是按图像行连续顺序存储,这个顺序与显示器上显示行的顺序一样;

另一种按交插方式存储。

交插图像按行分成如下所示的4组(Group):

Group1:

每隔8行组成一组,从第0行开始显示/第1遍交插Group2:

每隔8行组成一组,从第4行开始显示/第2遍交插Group3:

每隔4行组成一组,从第2行开始显示/第3遍交插Group4:

每隔2行组成一组,从第1行开始显示/第4遍交插由于显示图像需要较长的时间,使用这种方法存放和显示图像数据,人们就可以在图像显示完成之前看到这幅图像的概貌,而不觉得显示时间长。

图6-08说明了这种交插图像的存储和显示顺序。

图6-08交插图像显示顺序

③彩色表排序标志(SortFlag)域的含义与全局彩色表(GlobalColorTable)中(SortFlag)域的含义一样。

④保存(Reserved)。

⑤局部彩色表大小(SizeofLocalColorTable)域的值用来计算局部彩色表(GlobalColorTable)中包含的字节数。

5.局部彩色表

局部彩色表(LocalColorTable)用于紧跟在它后面的图像。

彩色表是否存在取决于图像描述块(ImageDescriptor)中局部彩色表标志(LocalColorTableFlag)位的设置。

彩色表的结构和大小与全局彩色表(GlobalColorTable)完全一样。

6.表基图像数据

GIF图像采用了LZW算法对实际的图像数据进展压缩。

为了提高压缩编码的效率,对LZW编码器输出的代码采用可变长度码VLC(variable-length-code),不是用位数高度的代码来表示输出,而且代表码字的位数是可变的。

表基图像数据(TableBasedImageData)由LZW最小代码长度(LZWMinimumCodeSize)和图像数据(ImageData)组成,如图6-09所示。

LZW最小代码长度域的值用来确定图像数据中LZW代码使用的初始位数。

图像数据(ImageData)由数据子块(DataSub-blocks)序列组成。

图6-09图像数据的存储格式

数据子块(DataSub-blocks)的结构如图6-10所示,这是一个可变长度的数据块,其长度由块大小域(BlockSize)域中的值确定,字节数在0~255之间。

图6-10数据子块的结构

7.图形控制扩展块

图形控制扩展块(GraphicControlExtension)包含处理图形描绘块时要使用的参数,它的结构如图6-11所示。

现说明如下:

(1)扩展导入符ExtensionIntroducer)用于识别扩展块的开始,域中的值是一个数值等于0x21的固定值。

(2)图形控制标签(GraphicControlLabel)用于标识当前块是一个图形控制扩展块,域中的值是一个数值等于0xF9的固定值。

(3)块大小(BlockSize)用来说明该扩展块所包含字节数,该字节数是从这个块大小(BlockSize)域之后到块完毕符之间的字节数。

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

 typedefstructgifcontrol 

BYTEbyBlockSize;

structflag 

BYTETransparency 

BYTEUserInput 

BYTEDisposalMethod:

Flag;

WORDwDelayTime;

BYTEbyTransparencyIndex;

BYTEbyTerminator;

GIFCONTROL;

(4)包装域的结构如图6-12所示。

处理方法(DisposalMethod)规定图形显示之后译码器要用表6-03中所述方法进展处理。

表6-03包装域规定的处理方法用户输入标志(UserInputFlag)域表示在继续处理之前是否需要用户输入响应。

在延时时间(DelayTime)和用户输入标志(UserInputFlag)都设置为1的情况下,继续处理的开始时间取决于用户响应输入在前还是延时时间完毕在前。

图6-12图形控制扩展块的包装结构(5)透明(TransparencyFlag)表示是否给出透明索引(transparencyindex)(6)延时时间(DelayTime)用来指定在图形显示之后继续处理数据流之前的等待时间,一百分之一秒为单位。

(7)当且仅当透明标志位设置为1时,透明索引(TransparencyIndex)用来指示处理程序是否要修改显示设备上的相应象点。

当且仅当透明标志位设置为1时,就要修改。

(8)块完毕符(BlockTerminator)表示该图形控制扩展块(GraphicControlExtension)完毕,它是由一个字节组成的数据块,该域的值是一个固定的值:

0x00,因此称为零长度数据子块(zero-lengthDataSub-block)。

8.无格式文本扩展块〔图像说明扩大块〕

无格式文本扩展块(PlainTextExtension)包含文本数据和描绘文本所须的参数。

文本数据用7位的ASCII字符编码并以图形形式显示。

扩展块的结构如图6-13所示。

图6-13无格式文本扩展块结构

  typedefstructgifplaintext 

WORDwTextGridLeft;

WORDwTextGridTop;

WORDwTextGridWidth;

WORDwTextGridDepth;

BYTEbyCharCellWidth;

BYTEbyCharCellDepth;

BYTEbyForeColorIndex;

BYTEbyBackColorIndex;

GIFPLAINTEXT;

其中,byBlockSize用来指定该图像扩大块的长度,其取值固定为13。

wTextGridLeft用来指定文字显示方格相对于逻辑屏幕左上角的X坐标〔以像素为单位〕。

wTextGridTop用来指定文字显示方格相对于逻辑屏幕左上角的Y坐标。

wTextGridWidth用来指定文字显示方格的宽度。

wTextGridDepth用来指定文字显示方格的高度。

byCharCellWidth用来指定字符的宽度,byCharCellDepth用来指定字符的高度。

byForeColorIndex用来指定字符的前景色,byBackColorIndex用来指定字符的背景色。

9.注释扩展块

注释扩展块(mentExtension)域的内容用来说明图形、作者或者其他任何非图形数据和控制信息的文本信息。

注释扩展块的结构如图6-14所示。

其中的注释数据是序列数据子块(DataSub-blocks),每块最多255个字节,最少1个字节。

图6-14注释扩展块

10.应用扩展块

应用扩展块(ApplicationExtension)包含制作该图像文件的应用程序的相关信息,它的结构如图6-15所示。

  GIF中用识别码0xFF来判断一个扩大块是否为应用程序扩大块。

它的结构定义如下:

  typedefstructgifapplication 

BYTEbyIdentifier[8];

BYTEbyAuthentication[3];

GIFAPPLICATION;

  其中,byBlockSize用来指定该应用程序扩大块的长度,其取值固定为12。

byIdentifier用来指定应用程序名称。

byAuthentication用来指定应用程序的识别码。

11.GIF文件完毕块

完毕块(GIFTrailer)表示GIF文件的结尾,它包含一个固定的数值:

0x3B。

它具有如图6-16所示的结构。

图6-16GIF文件完毕块

6.2.4速差表

表6-04GIF文件格式

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2