第6章 图像文件格式Word文档下载推荐.docx
- 文档编号:17269936
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:50
- 大小:51.56KB
第6章 图像文件格式Word文档下载推荐.docx
《第6章 图像文件格式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第6章 图像文件格式Word文档下载推荐.docx(50页珍藏版)》请在冰豆网上搜索。
标识符(Identifier)
2bytes
两字节的内容用来识别位图的类型:
‘BM’:
Windows3.1x,95,NT,…
‘BA’:
OS/2BitmapArray
‘CI’:
OS/2ColorIcon
‘CP’:
OS/2ColorPointer
‘IC’:
OS/2Icon
‘PT’:
OS/2Pointer
0002h
FileSize
1dword
用字节表示的整个文件的大小
0006h
Reserved
保留,设置为0
000Ah
BitmapDataOffset
从文件开始到位图数据开始之间的数据(bitmapdata)之间的偏移量
000Eh
BitmapHeaderSize
位图信息头(BitmapInfoHeader)的长度,用来描述位图的颜色、压缩方法等。
下面的长度表示:
28h-Windows3.1x,95,NT,…
0Ch-OS/21.x
F0h-OS/22.x
0012h
Width
位图的宽度,以像素为单位
0016h
Height
位图的高度,以像素为单位
001Ah
Planes
1word
位图的位面数
图像
信息
001Ch
BitsPerPixel
每个像素的位数
1-Monochromebitmap
4-16colorbitmap
8-256colorbitmap
16-16bit(highcolor)bitmap
24-24bit(truecolor)bitmap
32-32bit(truecolor)bitmap
001Eh
Compression
压缩说明:
0-none(也使用BI_RGB表示)
1-RLE8-bit/pixel(也使用BI_RLE4表示)
2-RLE4-bit/pixel(也使用BI_RLE8表示)
3-Bitfields(也使用BI_BITFIELDS表示)
0022h
BitmapDataSize
用字节数表示的位图数据的大小。
该数必须是4的倍数
0026h
HResolution
用像素/米表示的水平分辨率
002Ah
VResolution
用像素/米表示的垂直分辨率
002Eh
Colors
位图使用的颜色数。
如8-位/像素表示为100h或者256.
0032h
ImportantColors
指定重要的颜色数。
当该域的值等于颜色数时,表示所有颜色都一样重要
调色板数据
0036h
Palette
N*4byte
调色板规范。
对于调色板中的每个表项,这4个字节用下述方法来描述RGB的值:
∙1字节用于蓝色分量
∙1字节用于绿色分量
∙1字节用于红色分量
∙1字节用于填充符(设置为0)
图像数据
0436h
BitmapData
xbytes
该域的大小取决于压缩方法,它包含所有的位图数据字节,这些数据实际就是彩色调色板的索引号
6.1.3构件详解
1.位图文件头
位图文件头包含有关于文件类型、文件大小、存放位置等信息,在Windows3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义:
typedefstructtagBITMAPFILEHEADER{/*bmfh*/
UINTbfType;
DWORDbfSize;
UINTbfReserved1;
UINTbfReserved2;
DWORDbfOffBits;
}BITMAPFILEHEADER;
其中:
bfType
说明文件的类型.
bfSize
说明文件的大小,用字节为单位
bfReserved1
bfReserved2
bfOffBits
说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字节偏移量
2.位图信息头
位图信息用BITMAPINFO结构来定义,它由位图信息头(bitmap-informationheader)和彩色表(colortable)组成,前者用BITMAPINFOHEADER结构定义,后者用RGBQUAD结构定义。
BITMAPINFO结构具有如下形式:
typedefstructtagBITMAPINFO{/*bmi*/
BITMAPINFOHEADERbmiHeader;
RGBQUADbmiColors[1];
}BITMAPINFO;
bmiHeader
说明BITMAPINFOHEADER结构
bmiColors
说明彩色表RGBQUAD结构的阵列
BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式,其结构定义为:
typedefstructtagBITMAPINFOHEADER{/*bmih*/
DWORDbiSize;
LONGbiWidth;
LONGbiHeight;
WORDbiPlanes;
WORDbiBitCount;
DWORDbiCompression;
DWORDbiSizeImage;
LONGbiXPelsPerMeter;
LONGbiYPelsPerMeter;
DWORDbiClrUsed;
DWORDbiClrImportant;
}BITMAPINFOHEADER;
biSize
说明BITMAPINFOHEADER结构所需要的字节数
biWidth
说明图像的宽度,以像素为单位
biHeight
说明图像的高度,以像素为单位
biPlanes
为目标设备说明位面数,其值设置为1
biBitCount
说明位数/像素,其值为1、2、4或者24
biCompression
∙说明图像数据压缩的类型。
其值可以是下述值之一:
BI_RGB:
没有压缩;
∙BI_RLE8:
每个像素8位的RLE压缩编码,压缩格式由2字节组成(重复像素计数和颜色索引);
∙BI_RLE4:
每个像素4位的RLE压缩编码,压缩格式由2字节组成
biSizeImage
说明图像的大小,以字节为单位。
当用BI_RGB格式时,可设置为0
biXPelsPerMeter
说明水平分辨率,用像素/米表示
biYPelsPerMeter
说明垂直分辨率,用像素/米表示
biClrUsed
说明位图实际使用的彩色表中的颜色索引数
biClrImportant
说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。
现就BITMAPINFOHEADER结构作如下说明:
(1)彩色表的定位
应用程序可使用存储在biSize成员中的信息来查找在BITMAPINFO结构中的彩色表,如下所示:
pColor=((LPSTR)pBitmapInfo+(WORD)(pBitmapInfo->
bmiHeader.biSize))
(2)biBitCount
biBitCount=1表示位图最多有两种颜色,黑色和白色。
图像数据阵列中的每一位表示一个像素。
biBitCount=4表示位图最多有16种颜色。
每个像素用4位表示,并用这4位作为彩色表的表项来查找该像素的颜色。
例如,如果位图中的第一个字节为0x1F,它表示有两个像素,第一像素的颜色就在彩色表的第2表项中查找,而第二个像素的颜色就在彩色表的第16表项中查找。
biBitCount=8表示位图最多有256种颜色。
每个像素用8位表示,并用这8位作为彩色表的表项来查找该像素的颜色。
例如,如果位图中的第一个字节为0x1F,这个像素的颜色就在彩色表的第32表项中查找。
biBitCount=24表示位图最多有224=16777216种颜色。
bmiColors(或者bmciColors)成员就为NULL。
每3个字节代表一个像素,其颜色有R、G、B字节的相对强度决定。
(3)ClrUsed
BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目。
如果ClrUsed设置成0,位图使用的颜色数目就等于biBitCount成员中的数目。
(4)图像数据压缩
①BI_RLE8:
每个像素为8位的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。
编码方式:
由2个字节组成,第一个字节指定使用相同颜色的像素数目,第二个字节指定使用的颜色索引。
此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示:
∙第二个字节的值为0:
行的结束。
∙第二个字节的值为1:
图像结束。
∙第二个字节的值为2:
其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。
绝对方式:
第一个字节设置为0,而第二个字节设置为0x03~0xFF之间的一个值。
在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个像素的颜色索引。
压缩数据格式需要字边界(wordboundary)对齐。
[例6.1]用十六进制表示的8位压缩图像数据如下:
0304050600034556670002780002050102780000091E0001
这些压缩数据可解释为:
压缩数据
扩展数据
0304
040404
0506
0606060606
000345566700
455667
0278
7878
00020501
从当前位置右移5个位置后向下移一行
0000
行结束
091E
1E1E1E1E1E1E1E1E1E
0001
RLE编码图像结束
②BI_RLE4:
每个像素为4位的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。
这两种方式是:
由2个字节组成,第一个字节指定像素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。
第一个像素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,依此类推。
这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个像素。
此外,BI_RLE4也同样联合使用第二个字节中的值表示:
[例6.2]用十六进制数表示的4位压缩图像数据:
0304050600064556670004780002050104780000091E0001
压缩数据
040
06060
000645566700
455667
0478
7878
1E1E1E1E1
RLE图像结束
3.彩色表
彩色表包含的元素与位图所具有的颜色数相同,像素的颜色用RGBQUAD结构来定义。
对于24-位真彩色图像就不使用彩色表,因为位图中的RGB值就代表了每个像素的颜色。
彩色表中的颜色按颜色的重要性排序,这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。
RGBQUAD结构描述由R、G、B相对强度组成的颜色,定义如下:
typedefstructtagRGBQUAD{/*rgbq*/
BYTErgbBlue;
BYTErgbGreen;
BYTErgbRed;
BYTErgbReserved;
}RGBQUAD;
rgbBlue
指定蓝色强度
rgbGreen
指定绿色强度
rgbRed
指定红色强度
rgbReserved
4.位图数据
紧跟在彩色表之后的是图像数据字节阵列。
图像的每一扫描行由表示图像像素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。
扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。
6.2GIF文件格式
6.2.1简介
GIF(GraphicsInterchangeFormat)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。
GFI图像文件以数据块(block)为单位来存储图像的相关信息。
一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(DataStream)。
数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。
GIF文件格式采用了LZW(Lempel-ZivWalch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。
此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。
如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。
6.2.2.文件结构
GIF文件结构的典型结构如图6-01所示。
为下文说明方便,在构件左边加了编号。
1
Header
GIF文件头
2
LogicalScreenDescriptor
逻辑屏幕描述块
3
GlobalColorTable
全局彩色表
…扩展模块(任选)…
4
ImageDescriptor
图形描述块
5
LocalColorTable
局部彩色表(可重复n次)
可
6
TableBasedImageData
表式压缩图像数据
重
7
GraphicControlExtension
图像控制扩展块
复
8
PlainTextExtension
无格式文本扩展块
n
9
CommentExtension
注释扩展块
个
10
ApplicatonExtension
应用程序扩展块
11
GIFTrailer
GIF文件结束块
图6-01GIF文件结构
数据块可分成3类:
控制块(ControlBlock),图形描绘块(Graphic-RenderingBlock)和专用块(SpecialPurposeBlock)。
(1)控制块:
控制块包含有用来控制数据流(DataStream)或者设置硬件参数的信息,其成员包括:
∙GIF文件头(Header)
∙逻辑屏幕描述块(LogicalScreenDescriptor)
∙图形控制扩展块(GraphicControlExtension)
∙文件结束块(Trailer)
(2)图形描绘块:
包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
∙图像描述块(ImageDescriptor)
∙无格式文本扩展块(PlainTextExtension)
(3)特殊用途数据块;
包含有与图像处理无关的信息,其成员包括:
∙注释扩展块(CommentExtension)
∙应用扩展块(ApplicationExtension)
除了在控制块中的逻辑屏幕描述块(LogicalScreenDescriptor)和全局彩色表(GlobalColorTable)的作用范围是整个数据流(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”,或者更加新的版本号。
字节号
数据类型
Signature
GIF标记
3Bytes
Version
版本号
图6-02标记/版本数据块的结构
2.逻辑屏幕描述块
逻辑屏幕描述块(LogicalScreenDescriptor)包含定义图像显示区域的参数,包括背景颜色信息。
这个数据块中的坐标相对于虚拟屏幕的左上角,不一定是指显示屏的绝对坐标,这就意味可以参照窗口软件环境下的窗口坐标或者打印机坐标来设计图像显示程序。
逻辑屏幕描述块的结构如图6-03所示:
类型
LogicalScreenWidth
逻辑屏幕宽度
Unsigned
(以像素为定单位)
LogicalScreenHeight
逻辑屏幕高度
G
CR
S
Size
包装域
见图6-04
BackgroundColorIndex
背景颜色索引
Byte
PixelAspectRatio
像素宽高比
图6-03屏幕描述块的结构
逻辑描述块包含7个字节。
字节0和字节1用来说明逻辑显示屏的宽度,字节3和字节4用来说明逻辑显示屏的高度,字节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表示最重要的颜色排在前。
这样做的目的是辅助颜色数比较少的解码器能够选择最好的颜色子集,在这种情况下解码器就可选择彩色表中开始段的彩色来显示图像。
④全局彩色表大小(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 图像文件格式 图像文件 格式