GIF格式详解Word文档格式.docx

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

GIF格式详解Word文档格式.docx

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

GIF格式详解Word文档格式.docx

局部彩色表(可重复n次)

6

TableBasedImageData

表式压缩图像数据

7

GraphicControlExtension

图像控制扩展块

8

PlainTextExtension

无格式文本扩展块

n

9

CommentExtension

注释扩展块

10

ApplicationExtension

应用程序扩展块

11

GIFTrailer

GIF文件结束块

按块的特征可以分为三类:

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

1、控制块

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

●GIF文件头(Header)

●逻辑屏幕描述块(LogicalScreenDescriptor)

●图形控制扩展块(GraphicControlExtension)

●文件结束块(Trailer)

2、图形描绘块

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

●图像描述块(ImageDescriptor)

●无格式文本扩展块(PlainTextExtension)

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

3、特殊用途数据块

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

●注释扩展块(CommentExtension)

●应用扩展块(ApplicationExtension)

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

5.3.2构件详解

1、GIF文件头

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

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

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

typedefstructgifheader{

BYTEbySignature[3];

BYTEbyVersion[3];

}GIFHEADER;

字节号

域的名称

数据类型

Signature

GIF标记

3Bytes

Version

版本号

图1标记/版本数据块的结构 

2、逻辑屏幕描述块

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

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

逻辑屏幕描述块的结构如图2所示:

typedefstructgifscrdesc{

WORDwWidth;

WORDwDepth;

structglobalflag{

BYTEPalBits:

3;

BYTESortFlag:

1;

BYTEColorRes:

BYTEGlobalPal:

GlobalFlag;

BYTEbyBackground;

BYTEbyAspect;

GIFSCRDESC;

类型

LogicalScreenWidth

逻辑屏幕宽度

Unsigned

(以像素为定单位)

LogicalScreenHeight

逻辑屏幕高度

G

CR

S

Size

包装域

见图3

BackgroundColorIndex

背景颜色索引

Byte

PixelAspectRatio

像素宽高比

图2屏幕描述块的结构

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

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

现作如下说明:

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

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

如果G=1,表示有一个全局彩色表(GlobalColorTable)将紧跟在这个逻辑屏幕描述块(LogicalScreenDescriptor)之后;

这个标志也用来选择背景颜色索引(BackgroundColorIndex)。

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

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

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

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

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

如果S=0,表示没有重要性排序;

如果S=1表示最重要的颜色排在前。

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

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

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

GlobalColorTableFlag

ColorResolution

SortFlag

SizeofGlobalColorTable

图3逻辑屏幕描述块中的包装域结构 

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

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

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

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

AspectRatio=(PixelAspectRatio+15)/64

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

1~1:

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

3、全局彩色表

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

但归纳起来只有两类:

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

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

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

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

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

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

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

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

(3)如果同类型的图像能够使用相同的彩色表来显示,编码器就要尽可能使用一个全局彩色表(GlobalColorTable);

如果没有彩色表可用,解码器就可以使用计算机系统提供的彩色表或者解码器自身的彩色表。

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

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

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

2(n+1),

彩色的结构如图4所示:

76543210

redintensity

红色索引000

greenintensity

绿色索引000

blueintensity

蓝色索引000

红色索引001

绿色索引001

蓝色索引001

745

红色索引255

746

绿色索引255

767

蓝色索引255

图4彩色表结构

局部彩色表与全局彩色表有相同的存储格式。

4、图像描述块

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

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

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

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

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

图像描述块(ImageDescriptor)的结构如图5所示。

typedefstructgifimage{

   

WORDwLeft;

WORDwTop;

WORDwWidth;

WORDwDepth;

structlocalflag{

BYTEPalBits 

:

3;

BYTEReserved 

:

2;

BYTESortFlag 

BYTEInterlace:

BYTELocalPal 

LocalFlag;

GIFIMAGE;

ImageSeparator

图像分隔符

ImageLeftPosition

图像左边位置

ImageTopPosition

图像顶部位置

ImageWidth

图像宽度

ImageHeight

图像高度

见图6

图5图像描述块的结构

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

0x2C;

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

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

LocalColorTableFlag

InterlaceFlag

Reserved

SizeofLocalColorTable

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

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

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

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

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

(2)交插显示标志(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遍交插

由于显示图像需要较长的时间,使用这种方法存放和显示图像数据,人们就可以在图像显示完成之前看到这幅图像的概貌,而不觉得显示时间长。

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

行号

像 

交插遍次

……………………………………

12

13

14

15

16

17

18

19

图7交插图像显示顺序

(3)彩色表排序标志(SortFlag)域的含义与全局彩色表(GlobalColorTable)中(SortFlag)域的含义相同。

(4)保留(Reserved)。

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

5、局部彩色表

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

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

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

6、表基图像数据

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

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

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

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

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

LZWMinimumCodeSize

LZW最小代码长度 

ImageData

图像数据

Data 

Sub-blocks

图8图像数据的存储格式

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

BlockSize

块大小

DataValues

数值

255

图9数据子块的结构

7、图形控制扩展块

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

现说明如下:

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

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

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

 typedefstructgifcontrol{

BYTEbyBlockSize;

structflag{

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

当前位置:首页 > 高中教育 > 理化生

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

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