BMP位图

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数据结构存储。图像的每一扫描行由表示图像的连续像素字节组成,每一行的字节数取决于图像的颜色数和图像的宽度。扫描行是由底向上存储的,也就是说,数据存放是从下到上,从左到右。

猜你喜欢

转载自blog.csdn.net/any1234567890/article/details/83376959