BMP文件结构

来源:互联网 发布:mac资源库在哪里 编辑:程序博客网 时间:2024/05/18 00:56

BMP图像文件被分成4个部分:

位图文件头(Bitmap File Header)

位图信息头(Bitmap Info Header)

颜色表(Color Map)

位图数据(Data Bits 或 Data Body)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第一部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,长度固定为14字节。

typedef struct tagBITMAPFILEHEADER

{

WORD bfType;//位图文件类型,0x4D42(即字符串“BM”),这里要注意,写错了图片会不显示的,用UE打开是42  4D

DWORD bfSize;//整个文件的大小

WORD bfReserved1;//保留字

WORD bfReserved2;//保留字

DWORD bfOffBits;//文件头到颜色表的大小

}BITMAPFILEHEADER, FAR * LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二部分为位图信息头BITMAPINFOHEADER,是一个结构体类型的数据结构,长度也是固定的,为40字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize;//本结构长度,为40个字节

LONG biWidth;//位图宽度,以像素为单位

LONG biHeight;//位图高度

WORD biPlanes;//目标设备的级别,必须为1

WORD biBitCount;//位深,每个像素所占的位数(bit)

DWORD biCompression;//位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为windows定义常量)

DWORD biSizeImage;//实际的位图数据占用的字节数

LONG biXPelsPerMeter;//指定目标设备的水平分辨率单位是像素/米

LONG biYPelsPerMeter;//指定目标设备的垂直分辨率单位是像素/米

DWORD biClrUsed;//位图实际用到的颜色数,如果该值为0,则用到的颜色数为2的biBitCount次幂即2^biBitCount,如24位图2^24

DWORD biClrImportant;//位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的

}BITMAPINFOHEADER, FAR* LPBITMAPINFO, *PBITMAPINFOHEADER;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第三部分为颜色表,是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为0,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是一个结构体类型,占4个字节。

typedef struct tagRGBQUAD

{

BYTE rgbBule;//该像素索引颜色的蓝色分量

BYTE rgbGreen;//该像素索引颜色的绿色分量

BYTE rgbRed;//该像素索引颜色的红色分量

BYTE rgbReserved;//保留字

}RGBQUAD;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第四部分是位图数据即图像数据,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色(即24位图),位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。