BMP位图

xiaoxiao2025-06-06  41

BMP位图由4个部分组成:位图文件头,位图信息头,调色板,像素数据。

1.位图文件头

VC++中用BITMAPFILEHEADER数据结构定义位图头文件,它包含文件类型、文件大小、存放位置等信息,结构如下:

typedef struct tagBITMAPFILEHEADER { WORD byType; //说明文件的类型 DWORD bfSize; //说明文件的大小,以字节为单位 WORD bfReserved1; //保留,设置为0; WORD bfReserved2; //保留,设置为0; DWORD bfOffBits; //说明从BITMAPFILEHEARDER结构开始到实际图像数据陈列字节间的字节偏移量 }BITMAPFILEHEARDER;

这个结构的长度是固定的,为14字节,其中WORD为无符号16位二进制数,DWORD为无符号32位二进制数。

2.位图信息头

VC++中用BITMAPINFOHEADER数据结构定位位图信息头,它包含位图的大小、压缩类型和颜色格式等信息,其结构定义如下:

typedef struct BITMAPINFOHEADER { DWORD biSize; //本结构大小的字节数 LONG biWidth; //位图的宽度,单位为像素点 LONG biHeigh; //位图的高度,单位为像素点 WORD biPlanes; //目标设备位平面数,其值设置为1 WORD biBitCount; //像素的位数(1,4,8,24) DWORD biCompression; //压缩方式,0为不压缩 DWORD biSizeImage; //压缩图像大小的字节数,压缩图像为0 LONG biXpelsPerMeter;//水平分辨率(像素点每米) LONG biYpelsPerMeter;//垂直分辨率(像素点每米) DWORD biClrUsed; //图像中使用的颜色数 DWORD biClrImportant;//重要色彩数,0表示都重要 }BITMAPINFOHEADER;

3.调色板

VC++中,调色板实际上定义为一个数组,共有biClrUsed个像素,每个元素的类型是一个RGBQUAD结构,其定义如下:

typedef struct tagRGBQUAD { BYTE rgbBlue; //指定蓝色分量 BYTE rgbGreen; //指定绿色分量 BYTE rgbRed; //指定红色分量 BYTE rgbReserved;//保留值 }RGBQUAD;

24位真彩色图像不使用调色板,因为位图中的RGB值就代表了每个像素的颜色,所以BITMAPINFOHEADER后直接就是像素数据

4.像素数据

紧跟在调色板之后的是图像数据字节阵列,用BYTE数据结构存储。图像的每一扫描行由表示图像的连续像素字节组成,每一行的字节数取决于图像的颜色数和图像的宽度。扫描行是由底向上存储的,也就是说,数据存放是从下到上,从左到右。

转载请注明原文地址: https://www.6miu.com/read-5031354.html

最新回复(0)