BMP是一种常见的图片格式,它由4部分组成,分别为位图文件头、位图信息头、调色板和图像数据。位图文件头的数据结构及其描述说明如下:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
位图文件头字段描述:
字 段 名 | 大小(单位:字节) | 描 述 |
---|---|---|
bfType | 2 | 位图类别,此字段的值总为‘BM’ |
bfSize | 4 | BMP图像文件的大小 |
bfReserved1 | 2 | 总为0 |
bfReserved2 | 2 | 总为0 |
bfOffBits | 4 | BMP图像数据的地址 |
位图信息头由信息头的大小、图片宽度、图像高度、图像的色深等参数组成,其数据结构定义如下。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
位图信息头字段描述:
字 段 名 | 字节大小 | 描 述 |
---|---|---|
biSize | 4 | 本结构的大小,总是40字节 |
biWidth | 4 | BMP图像的宽度,单位像素 |
biHeight | 4 | 总为0 |
biPlanes | 2 | 总为0 |
biBitCount | 2 | 色深,即一个像素用多少位表示 |
biCompression | 4 | 压缩方式 |
biSizeImage | 4 | BMP图像数据大小 |
biXPelsPerMeter | 4 | 水平分辨率,单位像素/m |
biYPelsPerMeter | 4 | 垂直分辨率,单位像素/m |
biClrUsed | 4 | 位图使用的颜色 |
biClrImportant | 4 | 重要的颜色数量 |
本文不考虑彩色表,所以不做详细介绍。若采用RGB565格式保存,需要将压缩方式设置为3,即每个像素的值通过指定的掩码表示。在位图信息头数据信息后面紧接着的就是图像像素数据。
需要注意的是,像素数据在文件中的存储是先存储最后一行,然后依次向上,直到图像的第一行,行内数据是从左往右依次存放的。