位图是最常用的windows图形格式,通过windows API函数可以直接读取并绘制,不过,有时我们还是需要自己控制,那么,就让我们看看他的格式吧!
位图文件结构表 | ||
---|---|---|
位图文件 | 位图文件头 | 14 字节 |
位图信息头 | 40 字节 | |
彩色表(调色板) | 4N 字节 | |
位图数据 | x 字节 |
构件详解:
- 位图文件头
位图文件头包含文件类型、文件大小、存放位置等信息。结构定义如下:
typedef struct tagBITMAPFILEHEADER { UNIT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; }BITMAPFILEHEADER;
其中:
bfType 说明文件类型,在windows系统中为BM。
bfSize 说明文件大小。
bfReserved1 bfReserved2 保留,设置为0。
bfOffBits 说明实际图形数据的偏移量。 - 位图信息头
位图信息头包含位图的大小、压缩类型、和颜色格式,结构定义如下:
typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMerer; LONG biYPelsPerMerer; DWORD biClrUsed; DWORD biClrImportant; }BITMAPINFOHEADER;
其中:
biSize 说明BITMAPINFOHEADER结构所需字节数,在windows系统中为28h
biWidth 说明图像宽度
biHeight 说明图像高度
biPlanes 为目标设备说明位面数,其值设为1
biBitCount每个像素的位数,单色位图为1,256色为8,24bit为24。
biCompression压缩说明,BI_RGB:无压缩,BI_RLE8:8位RLE压缩,BI_RLE4:4位RLE压缩
biSizeImage说明图像大小,如无压缩,可设为0
biXPelsPerMeter水平分辨率
biYPelsPerMeter垂直分辨率
biClrUsed 位图使用的颜色数
biImportant重要颜色数目 - 彩色表
彩色表包含的元素与位图所具有的颜色数目相同,像素颜色用结构RGBQUAD来表示:
typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; }RGBQUAD;
其中:
rgbBlue 指定蓝色强度
rgbGreen 指定绿色强度
rgbRed 指定红色强度
rgbReserved保留,设为0 - 位图数据
紧跟在彩色表后的是图像数据震裂,图像每一扫描行有连续的字节组成,扫描行由底向上存储,阵列中第一字节为左下角像素,最后一字节为右上角像素。