Bitmap由四个部分组成,分别为:
1.位图文件头:
结构体如下:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //文件类型("BM")
DWORD bfSize; //文件大小
WORD bfReserved1; //保留字段0
WORD bfReserved2; //保留字段0
DWORD bfOffBits; //图像文件到文件头起始的偏移量
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
2.位图信息头:
结构体如下:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; //本结构体占用大小
LONG biWidth; //图像宽度(单位:像素)
LONG biHeight; //图像高度(单位:像素)
WORD biPlanes; //设备上图像平面数,必须为1
WORD biBitCount; //存储每个像素需要的二进制位数(1:单色;4:16色;8:256色;16:64K色(高彩色);24:16M色(真彩色);32:4096M色(增强型真彩色))
DWORD biCompression; //是否压缩存储图像数据
DWORD biSizeImage; //指定图像大小(单位:字节)
LONG biXPelsPerMeter; //水平方向分辨率
LONG biYPelsPerMeter; //竖直方向分辨率
DWORD biClrUsed; //实际图像使用颜色表中的颜色数
DWORD biClrImportant; //重要的颜色数(0表示所有都重要)
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
3.调色板:
结构体如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue; //蓝色分量
BYTE rgbGreen; //绿色分量
BYTE rgbRed; //红色分量
BYTE rgbReserved; //保留值
} RGBQUAD;
4.位图数据:
实际位图数据是一片连续的存储区域,其中保存着图像中每个像素的灰度(颜色)信息。
(1)256色灰度图像:图像数据就是该像素的实际灰度,1个像素需要1个字节来表示。
(2)索引图像:图像数据就是该像素颜色在调色板中的索引值。
(3)真彩色图:图像数据就是实际的RGB值,1个像素需要3个字节来表示。