Bitmap位图结构

Bitmap位图结构

一、位图数据结构

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:

◆ 位图文件头(bmp file header)  提供文件的格式、大小等信息

◆ 位图信息头(bitmap information)提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

◆ 调色板(color palette)可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表

◆ 位图数据(bitmap data)图像数据区

数据段名称

大小(byte

开始地址

结束地址

位图文件头(bitmap-file header)

14

0000h

000Dh

位图信息头(bitmap-information header)

40

000Eh

0035h

调色板(color table)

biBitCount决定

0036h

未知

图片点阵数据(bitmap data)

由图片大小和颜色定

未知

未知

 

 

二、位图文件头

1、位图文件头占14byte,在文件最前

2、2Bytes,必须为"BM",即0x424D 才是Windows位图文件

3、4Bytes,整个BMP文件的大小

4、2Bytes,保留,为0

5、2Bytes,保留,为0

6、4Bytes,文件起始位置到图像像素数据的字节偏移量文件头+信息头+调色板,如162432位图为14+40+0=54

bfSize:594486,bfOffBits:54

size:40,h:384,w:516

biPlanes:1 ,biBitCount:24,biCompression:0

biSizeImage:4608 ,biXPelsPerMeter:0,biYPelsPerMeter:0

biClrUsed:0 ,biClrImportant:0

bmsize:594432,stream length:594486

m_iImageDataSize:594432

三、位图信息头

 

变量名

地址偏移

大小

作用说明

biSize

000Eh

4Bytes

BNP信息头即BMP_INFOHEADER结构体所需要的字节数(以字节为单位)

biWidth

0012h

4Bytes

说明图像的宽度(以像素为单位)

biHeight

0016h

4Bytes

说明图像的高度(以像素为单位)。这个值还有一个用处,指明图像是正向的位图还是倒向的位图,该值是正数说明图像是倒向的即图像存储是由下到上;该值是负数说明图像是倒向的即图像存储是由上到下。大多数BMP位图是倒向的位图,所以此值是正值。

biPlanes

001Ah

2Bytes

为目标设备说明位面数,其值总设置为1

biBitCount

001Ch

2Bytes

说明一个像素点占几位(以比特位/像素位单位),其值可为1,4,8,16,2432

biCompression

001Eh

4Bytes

说明图像数据的压缩类型,取值范围为:

0         BI_RGB 不压缩(最常用)

1         BI_RLE8 8比特游程编码(BLE),只用于8位位图

2         BI_RLE4 4比特游程编码(BLE),只用于4位位图

3         BI_BITFIELDS比特域(BLE),只用于16/32位位图

4          

biSizeImage

0022h

4Bytes

说明图像的大小,以字节为单位。当用BI_RGB格式时,总设置为0

biXPelsPerMeter

0026h

4Bytes

说明水平分辨率,用像素/米表示,有符号整数

biYPelsPerMeter

002Ah

4Bytes

说明垂直分辨率,用像素/米表示,有符号整数

biClrUsed

002Eh

4Bytes

说明位图实际使用的调色板索引数,0:使用所有的调色板索引

biClrImportant

0032h

4Bytes

说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。

 

四、调色板

148位图像才会使用调色板数据,16,24,32位图像不需要调色板数据,即调色板最多只需要256项(索引0 - 255)。

颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha32位位图的透明度值,一般不需要)。即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。

颜色表中RGBQUAD结构数据的个数有biBitCount来确定,当biBitCount=1,4,8时,分别有2,16,256个表项。

biBitCount=1时,为2色图像,BMP位图中有2个数据结构RGBQUAD一个调色板占用4字节数据,所以2色图像的调色板长度为2*48字节。

biBitCount=4时,为16色图像,BMP位图中有16个数据结构RGBQUAD一个调色板占用4字节数据,所以16像的调色板长度为16*464字节。

biBitCount=8时,为256色图像,BMP位图中有256个数据结构RGBQUAD一个调色板占用4字节数据,所以256色图像的调色板长度为256*41024字节。

biBitCount=162432时,没有颜色表。

 

五、位图数据

位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

biBitCount=1时,8个像素占1个字节;

biBitCount=4时,2个像素占1个字节;

biBitCount=8时,1个像素占1个字节;

biBitCount=24,1个像素占3个字节;

Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充,

一个扫描行所占的字节数计算方法:

DataSizePerLine= (biWidth* biBitCount+31)/8;

// 一个扫描行所占的字节数

DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数

位图数据的大小(不压缩情况下):

DataSize= DataSizePerLine* biHeight;

 

颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可的出如下计算公式:图像数据信息大小=(图像宽度*图像高度*记录像素的位数)/8

 

你可能感兴趣的:(Bitmap位图结构)