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

一.BMP文件概述

BMP文件格式,又称为位图(Bitmap)或是Device Independent Device(DIB,

与设备无关位图),是Windows使用的图像文件格式,

位图是一个二维的位数组,

它与图像的图素一一对应。当现实世界的图像被扫描成位图以后,图像被分割成

网格,并以图素作为取样单位。在位图中的每个图素值指明了一个单位网格内图

像的平均颜色。单色位图每个图素只需要一位,灰色或彩色位图中每个图素需要

多个位。位图代表了Windows程序内储存图像信息的两种方法之一。储存图像信

息的另一种形式是metafile, Metafile储存的就是对图像如何生成的描述,而

不是将图像以数字化的图标代表。位图有两个主要的缺点。第一个问题是容易受

设备依赖性的影响。最明显的就是对颜色的依赖性,在单色设备上显示彩色位图

的效果总是不能令人满意的。另一个问题是位图经常暗示了特定的显示分辨率和

图像纵横比,

位图的第二个缺点是需要很大的储存空间。位图除空间尺寸以外,

位图还有颜色尺寸。这里指的是每个图素所需要的位数,有时也称为位图的颜色

深度(color depth)、位数(bit-count)或 位/图素(bpp:bits per pixel)

数。位图中的每个图素都有相同数量的颜色,每图素1位的位图称为二阶

(bilevel)、 二色(bicolor)或者单色 (monochrome)位图。每图素可以是

0或1,0表示黑色,1可以表示白色,但并不总是这样。对于其它颜色,一个图

素就需要有多个位。可能的颜色值等于2位数值。用2位可以得到4种颜色,用

4位可以得16种颜色,8位可得到256种颜色,16位可得到65,536种颜色,而

24位可得到16,777,216种颜色。

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

 bmp文件头(bmp file header):提供文件的格式、大小等信息。

 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、

压缩方式、颜色索引等信息。

 调色板(color palette):可选,如使用索引来表示图像,调色板就是索

引与其对应的颜色的映射表。

 位图数据(bitmap data):图像数据。

注意:我们一般见到的图像以24位图像为主,即R、G、B三种颜色各用8

个bit来表示,这样的图像我们称为真彩色,这种情况下是不需要调色板的,也

就是所位图信息头后面紧跟的就是位图数据了。因此有人说位图文件从文件头开

始偏移54个字节就是位图数据了,这其实说的是24或32位图的情况。安照这

种说法,我们写出的程序有时候也对某些BMP文件无效。8位的位图是有调色板

的。16位的位图有如果是16位的话555格式和565格式

555 bits :0rrrrrgggggbbbbb

565 bits : rrrrrggggggbbbbb

1.1bmp文件头

Windows为bmp文件头定义了如下结构体:

typedef struct tagBITMAPFILEHEADER

{

UINT16 bfType;

DWORD bfSize;

UINT16 bfReserved1;

UINT16 bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER;