静以修身

导航

[转] BMP文件格式

位图文件(Bitmap-FileBMP)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格式与显示设备有关,因此把它称为设备相关位图(device-dependent bitmapDDB)文件格式。Windows 3.0以后的BMP位图文件格式与显示设备无关,因此把这种BMP位图文件格式称为设备无关位图(device-independent bitmapDIB)格式,目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。BMP位图文件默认的文件扩展名是BMP或者bmp

位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、颜色表(color table)和位图数据。

1)位图文件头

文件头的信息主要包括与位图文件相关的信息,如文件类型、文件大小等,该部分信息共占14个字节。具体结构如表2-1

2-1 位图文件头结构

起始字节

所占字节数

具体内容

标识

1

2

文件类型(windows位图为“BM”)

bfType

3

4

文件大小

bfSize

7

4

保留

bfReserved

11

4

第一个位图数据的开始字节位置

bfOffBits

2)位图信息头

位图信息头的主要内容为与图像相关的信息,如位图的高度与宽度,位图的大小等,该部分信息共占40个字节。具体结构如表2-2

2-2 位图信息头结构

起始字节

所占字节数

具体内容

标识

15

4

位图信息头的长度(一般为40

biSize

19

4

位图的宽度

biWidth

23

4

位图的高度

biHeight

27

2

位图的位面数(=1)

biPlanes

29

2

每个像素所占位数(14824等)

biBitCount

31

4

位图压缩类型

( 0BI_RGB——未压缩,

1BI_RLE8——RLE8压缩

2BI_RLE4——RLE4压缩

3 BI_BITFIELDS)

biCompression

35

4

图像的大小(以字节为单位,必须是4的倍数)

biSizeImage

39

4

位图水平分辩率(像素/米)

biXPelsPerMeter

43

4

位图垂直分辩率(像素/米)

biYPelsPerMeter

47

4

位图实际使用的颜色数(=0使用所有颜色)

biClrUsed

51

4

指定重要的颜色数(=0 都重要)

biClrImportant

3)颜色表

该部分含有多个表项,每个表项的占4个字节。对于24位真彩图像是没有这部分内容。具体结构如表2-3

2-3 颜色表中的第1个表项的结构

起始字节

所占字节数

具体内容

标识

55

1

蓝色的亮度值

rgbBlue

56

1

绿色的亮度值

rgbGreen

57

1

红色的亮度值

rgbRed

58

1

保留

rgbReserved

颜色表中的表项个数由biBitCount确定,为2biBitCount个表项,因此颜色表的总长度为2biBitCount×4个字节。

4)位图数据

该部分的大小取决于压缩方法,它包含所有的位图数据,这些数据的值取决于biBitCount的值。具体结构如表2-4

2-4 位图数据结构

biBitCount

颜色表项数

        

1

2

象素值为0时,使用第一项颜色,为1时使用第二项颜色。

4

16

若点阵位图数据中某个字节为OX1F,则该字节代表2个象素。第一个象素用第2项颜色,第二个象素用第16项。

8

256

点阵位图中每一个字节表示一个象素。

24

0

无颜色表。位图数据中三个字节表示一个象素的红、绿、蓝值。

biBitCount=1 表示位图最多有两种颜色,黑色和白色。图像数据中的每一位(01)表示一个像素(黑色或白色)。

biBitCount=4 表示位图最多有16种颜色。每个像素用4位表示,并用这4位作为颜色表的表项来查找该像素的颜色。例如,如果位图中的第一个字节的十六进制数为1F,它表示两个像素,第一像素的颜色就在颜色表的第2表项中查找,第二个像素的颜色在颜色表的第16表项中查找。

biBitCount=8 表示位图最多有256种颜色。每个像素用8位表示,并用这8位作为颜色表的表项来查找该像素的颜色。例如,如果位图中的第一个字节的十六进制数为1F,这个像素的颜色就在颜色表的第32表项中查找。

biBitCount=24 表示位图最多有22416 777 216种颜色。颜色表为空。每3个字节代表一个像素,每个字节分别表示RGB三分量的值。

位图数据的存放顺序是从图像中的最后一行到第一行,每一行的顺序是从左到右。值得一提的是,每一行像素所占的字节数必须是4的整倍数,如果实际像素所占字节数不足4的倍数,则需要补齐,下一行像素值也是从4的倍数字节处后开始存放。

posted on 2009-06-19 19:08  静以修身  阅读(857)  评论(0编辑  收藏  举报