每一种图像文件均有一个文件头,在文件头之后才是图像数据。
文件头的包括:文件类型,文件制作者,制作时间,版本号,文件大小等内容。
常用的图像文件有:BMP,JPEG,PCX,TIEF,GIF等类型的图像文件。
BMP图像的文件格式
位图文件头:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; 文件类型,位图必须是0x424D,即字符串“BM”
DWORD bfSize; 指定文件大小,包括这14个字节的文件头
WORD bfReserved1; 保留字,不用考虑
WORD bfReserved2; 保留字,不用考虑
DWORD bfOffBits; 从文件头到实际位图数据的偏移字节数
} BITMAPFILEHEAER;
位图信息头:
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; 本结构的长度,为40
LONG biWidth; 图像的宽度,单位是像素
LONG biHeight; 图像的宽度,单位是像素
WORD biPlanes; 位平面数,必须是1
WORD biBitCount; 指定颜色位数,即用多少位来表示一个像素
DWORD biCompression; 指定是否压缩,有效值为
BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS
DWORD biSizeImage; 指定位图数据所占的字节数
LONG biXPelsPerMeter; 目标设备水平分辨率,单位为像素/米
LONG biYPelsPerMeter; 目标设备垂直分辨率,单位为像素/米
DWORD biClrUsed; 实际使用的颜色数,若为0,则使用的颜色数为2的biBitCount次方
DWORD biClrImportant; 图像中重要的颜色数,若为0,则所有颜色都是重要的
}BITMAPINFOHEADER;
调色板:
对于16位,24位的真彩色图,BITMAPINFOHEADER后直接跟的就是图像数据。
调色板实际上是一个数组,共有biClrUsed个元素(如果biClrUsed为0则就有2的biBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节。
typedef struct tagRGBQUAD
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
}RGBQUAD;
注意:位图中每一行的字节数必须是4的整数倍,如果不是则需要补齐。
BMP文件的数据是按从下到上,从左到右的顺序进行存放。