文档库 最新最全的文档下载
当前位置:文档库 › BMP文件结构

BMP文件结构

图象文件格式

BMP文件由四部分组成:文件头,图象控制信息,调色板信息(或者掩码信息)和位图点阵。



1.位图文件头:包含有关于文件类型、文件大小、存放位置等信息

结构如下:

typedef struct tagBITMAPFILEHEADER
{
WORD bfType; //文件类型
DWORD bfSize; //文件的字节数
WORD bfReserved1; //保留
WORD bfReserved2; //保留
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

其中:

(1)WORD bfType 用于表示文件类型,如果它是bmp文件,那么它这个位置的值一定是”BM” 也就是0x4D42。

(2)DWORD bfSize: 表示整个文件的字节数

(3)WORD bfReserved1: 保留
(4)WORD bfReserved2: 保留

(5)DWORD bfOffBits: 表示位图的数据信息离文件头的偏移量,以字节为单位
2.图象控制信息:包含位图文件的大小、压缩类型和颜色格式等信息

结构如下:

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize; //表示本结构的大小

LONG biWidth; //位图的宽度

LONG biHeight; //位图的高度

WORD biPlanes; //永远为1 , 附msdn解释

//Specifies the number of planes for the target device. This value must be set to 1.

WORD biBitCount;//位图的位数 分为1 4 8 16 24 32

DWORD biCompression;

DWORD biSizeImage; //表示位图数据区域的大小以字节为单位

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

其中:

(1)DWORD biSize: 说明BITMAPINFOHEADER结构所需要的字数。注:这个值并不一定是BITMAPINFOHEADER结构的 尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,
或是sizeof(BITMAPV5HEADER)的值。这要根据该位图文件的格式 版本来决定,不过,就现在的情况来看,绝大多数的BMP图像都是BITMAPINFOHEADER结构的。

(2)LONG biWidth: 说明图象的宽度,以象素为单

(3)LONG biHeight; 说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位 图,
还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,
高度值是一个正数。(注:当高度值是一个负数时(正向图像),

(4)biCompression图像将不能被压缩(也就是说


(5)WORD biPlanes; 为目标设备说明位面数,其值将总是被设为1

(6)WORD biBitCount; 说明比特数/象素,其值为1、4、8、16、24、或32

(7)DWORD biCompression; 说明图象数据压缩的类型。其值可以是下述值之一:

a. BI_RGB:没有压缩

b. BI_RLE8:每个象素8比特的RLE压缩编码,压缩格式由2字节组成(重复象素计数和颜色索引);

c. BI_RLE4:每个象素4比特的RLE压缩编码,压缩格式由2字节组成

d. BI_BITFIELDS:每个象素的比特由指定的掩码决定。

(8)DWORD biSizeImage; 说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0

(9)LONG biXPelsPerMeter; 说明水平分辨率,用象素/米表示

(10)LONG biYPelsPerMeter; 说明垂直分辨率,用象素/米表示

(11)DWORD biClrUsed; 说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)

(12)DWORD biClrImportant; 说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。



3. 调色板或者掩码

如果是8位位图 则存放调色板 ;16 与32位 位图则存放RGB颜色的掩码,这些掩码以DWORD大小来存放。

RGBQUAD结构描述由R、G、B相对强度组成的颜色,定义如下:

typedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

其中:

rgbBlue: 指定蓝色强度

rgbGreen: 指定绿色强度

rgbRed: 指定红色强度

rgbReserved: 保留,设置为0

4. 位图点阵数据

图象的每一扫描行由表示图象象素的连续的字节组成,每一行的字节数取决于图象的颜色数目和用象素表示的图象宽度。扫描行 是由底向上存储的,这就是说,
阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。
(只针对与倒向DIB,如果是正向DIB, 则扫描行是由顶向下存储的),倒向DIB的原点在图像的左下角,
而正向DIB的原点在图像的左上角。同时,每一扫描行的字节数必需是4的整倍数,也就是 DWORD对齐的。




相关文档