2024年3月26日发(作者:)

维基百科的BMP定义

BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图),是微软视窗图形子系

统(Graphics Device Interface)内部使用的一种位图图形格式,它是微软视窗平台上的一个

简单的图形文件格式。

图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670

万(24位)种颜色(其中位是表示每点所用的数据位)。8位图像可以是索引彩色图像外,

也可以是灰阶图像。表示透明的alpha通道也可以保存在一个类似于灰阶图像的独立文件中。

带有集成的alpha通道的32位版本已经随着Windows XP出现,它在视窗的登录和主题系统

中都有使用。

文件大小计算

BMP文件通常是不压缩的,所需存储空间比较大。

一个像素所占的字节数为n∕8字节,n是位深。文件大小可以根据以下公式近似计算:

BMP文件大小≈54+4*2

n

+(width*height*n) ∕8;

54是位图文件的文件头,4*2

n

是调色板的大小(对于没有调色板的位图文件,则不存

在这一项),最后一项是像素数据。由于存储算法决定的因素,实际文件大小和计算值可能

有细微差别;因此使用的≈符号而不是等于号。

文件存储格式

BMP图像自推出以后,几经演进,存储格式也有所变化。下表详细描述了位图文件可

能包含的数据。

结构体可

名称 选

大小 用途 备注

位图文

否 14字节

件头

存储位图文

件通用信息

仅在读取文件时有用

存储位图详

固定(存在7种

DIB头 否 细信息及像

不同版本)

素格式

紧接在位图文件头后

3或4 DWORD

附加位定义像素格

是 (12或16字

掩码 式

节)

仅在DIB头是BITMAPINFOHEADER

时存在

调色板 备可变

定义图像数

据(像素数色深≤ 8时不能省略

组)所用颜色

填充区

是 可变

A

结构体对齐 位图文件头中像素数组偏移量的产物

像素数

否 可变

定义实际的

像素数值

像素数据在DIB头和附加位掩码中定

义。像素数组中每行均以4字节对齐

填充区

是 可变

B

结构体对齐

DIB头中ICC色彩特性数据偏移量的

产物

ICC色

彩特性是 可变

数据

定义色彩特

可以包含外部文件路径,由该文件来

定义色彩特性

Remark:像素数组每行均以4字节对齐,这会影响我们怎么读取像素数据。在n≤ 8

时,调色板是不可忽略的,这对于我们找到像素头是很重要的。(其他参数同样会影响我们

找到像素头)

典型的文件格式

 位图头:保存位图文件的总体信息

 位图信息(DIB头):保存位图文件的详细信息

 调色板:保存所用颜色的定义

 位图数据:保存实际像素数据

这是标准位图的文件格式,其他的一些位图图像可能会

有区别。

A 位图头(占用14个字节)

 字节 #0-1 保存文件标识符,典型的为BM (存储数据 42 4D 代表的是B和M

的ascii码)

 字节 #2-5 保存文件大小

 字节 #6-9 是保留部分,留作扩展

 字节 #10-13 保存实际像素数据的起始位置 (比如,36 00 00 00表示从第36H(54)

字节开始为像素数据)

B 位图信息(占用40个字节,从第15个字节开始)

 #14-17 定义以下用来描述影像的区块大小

 #18-21 保存水平像素个数

 #22-25 保存竖直像素个数

 #26-27 保存所用彩色位面个数