购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.3 BMP

BMP(BitMap,位图)是微软Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序支持。BMP格式的特点是几乎不进行压缩,包含的图像信息丰富,但也导致了占用磁盘空间过大的问题。因此,BMP在单机上更为流行。BMP文件默认的文件扩展名是.BMP或.bmp,有时也会以.DIB或.RLE作为扩展名。BMP文件的数据存放格式为从下到上、从左到右,即BMP数据是倒置的。在读取BMP文件时,从最下面的数据开始读取,依次从下到上读取数据。BMP文件的结构如图2-3所示。

图2-3 BMP文件的结构

BMP文件主要由4部分构成:BMP文件头、BMP信息头、调色板和BMP数据。

1.BMP文件头

BMP文件头大小为14字节,包括以下字段。

(1)文件标识符:2字节,必须为BM,即0x424D。

(2)文件大小:4字节,表示整个BMP文件的大小。

(3)保留字1:2字节,必须设置为0。

(4)保留字2:2字节,必须设置为0。

(5)偏移量:4字节,表示从BMP文件头起始位置到BMP数据的字节偏移量(以字节为单位)。因为BMP文件的调色板长度根据BMP格式的不同而变化,所以可以利用偏移量快速从BMP文件中读取图像数据。

2.BMP信息头

BMP信息头大小为40字节,包括以下字段。

(1)数据长度:4字节,表示BMP信息头的数据长度。

(2)图像宽度:4字节,以像素为单位。

(3)图像高度:4字节,以像素为单位。图像高度的值可以指明图像是正向的还是倒向的。若该值是正数,则说明图像是倒向的,即BMP存储是从下到上的;若该值是负数,则说明图像是正向的,即BMP存储是从上到下的。大多数BMP是倒向存储的。

(4)图像数据平面:2字节,表示目标设备的位面数,BMP存储的是RGB数据,该值总为1。

(5)图像像素比特数:2字节,表示一个像素点所用的比特数。该值可为1、4、8、16、24、32。

(6)压缩类型:4字节,0表示BI_RGB,不压缩,是最常用的;1表示BI_RLE8,即8bit游程编码,只用于8bit BMP;2表示BI_RLE4,即4bit游程编码,只用于4bit BMP;3表示BI_BITFIELDS比特域,只用于16/32bit BMP。

(7)图像数据大小:4字节,表示图像数据长度,图像数据信息大小=(图像宽度×图像高度×记录像素的比特)/8,单位为字节。当用BI_RGB格式时,设置为0。

(8)水平分辨率:4字节,是一个有符号整数,单位为像素/米。

(9)垂直分辨率:4字节,是一个有符号整数,单位为像素/米。

(10)实际使用的调色板索引数:4字节,当该值为0时,表示使用所有的调色板索引。

(11)重要的调色板索引数:4字节,表示对图像显示有重要影响的颜色索引数目,当该值为0时,表示所有的调色板索引都重要。

3.调色板和BMP数据

调色板是对灰度图像或索引图像而言的,彩色图像不需要调色板,其BMP信息头后紧接着BMP数据。1bit、4bit、8bit图像需要使用调色板,16bit、24bit、32bit图像不需要使用调色板,因此,调色板最多只需要256项,索引值为0~255。

调色板的大小由BMP信息头中的图像像素比特数(biBitCount)确定。

当biBitCount=1时,为2色图像,BMP中有2个调色板,每个调色板占用4字节,因此,2色图像的调色板长度为8字节。

当biBitCount=4时,为16色图像,BMP中有16个调色板,每个调色板占用4字节,因此,16色图像的调色板长度为64字节。

当biBitCount=8时,为256色图像,BMP位图中有256个调色板,每个调色板占用4字节,因此,256色图像的调色板长度为1024字节。

当biBitCount=16、24或32时,没有调色板。调色板中每4字节表示一种颜色,依次代表B(蓝色)、G(绿色)、R(红色)、alpha(透明度,32bit BMP一般不需要透明度值)。

对于用到调色板的BMP,BMP数据就是该像素颜色在调色板中的索引值;对于真彩色图像,BMP数据就是实际的 R G B 值。需要注意的是,BMP数据每行的字节数必须是4的整数倍,否则需要补齐。

BMP数据记录了BMP的每个像素值,记录顺序是在扫描行内从左到右,扫描行之间从下到上。BMP的一个像素值所占用的字节数由BMP信息头中的图像像素比特数确定。当biBitCount=1时,8个像素值占用1字节;当biBitCount=4时,2个像素值占用1字节;当biBitCount=8时,1个像素值占用1字节;当biBitCount=24时,1个像素值占用3字节。 uLF8FxLM40PWPhCHy9JeX9RVzU4cAQrRMnJ/mFvY5icrIlKmJ4YfsjtOkuyajo0u

点击中间区域
呼出菜单
上一章
目录
下一章
×