有用吗?往下看。
=================
BMP图象格式
该文件按顺序包含文件头结构、图象头结构、调色板(256色图象)和图象数据等四个部分。在BMP图象格式中,无灰度图象。
1、文件头结构
typedef struct tagBITMAPFILEHEADER
{
UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMPFILEHEADER;
其中:bfType=0x4d42; //'BM',BMP图象的标志
bfSize=文件头结构字节数;
bfReserved1=0; //保留
bfReserved2=0; //保留
bfOffBits=文件头结构字节数+图象头结构字节数+调色板字节数;
2、图象头结构
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;
(1)、黑白图象头结构:<----------------------------------有用吗?
biSize=图象头结构字节数;
biWidth=图象宽度(象素);
biHeight=图象高度(象素);
biPlanes=1;
biBitCount=1;
biCompression=0L; //未压缩
biSizeImage=0L; //图象数据字节数,未压缩时可赋0
biXPelsPerMeter=图象横向分辩率;//象素/米
biYPelsPerMeter=图象纵向分辩率;//象素/米
biClrUsed=0;
biClrImportant=0;
(2)、256色图象头结构:(说明部分同上,就不再累述)
biSize=图象头结构字节数;
biWidth=图象宽度(象素);
biHeight=图象高度(象素);
biPlanes=1;
biBitCount=8;
biCompression=0L;
biSizeImage=0L;
biXPelsPerMeter=图象横向分辩率;
biYPelsPerMeter=图象纵向分辩率;
biClrUsed=256;
biClrImportant=0;
(3)、真彩色图象头结构:(说明部分同上,就不再累述)
biSize=图象头结构字节数;
biWidth=图象宽度(象素);
biHeight=图象高度(象素);
biPlanes=1;
biBitCount=24;
biCompression=0L;
biSizeImage=0L;
biXPelsPerMeter=图象横向分辩率;
biYPelsPerMeter=图象纵向分辩率;
biClrUsed=0;
biClrImportant=0;
3、调色板
只有256色图象才有调色板,而且有256个调色板。调色板数据紧跟在图象头结构的后
面。
调色板结构:
typedef struct tagRGBQUAD
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
4、图象数据
BMP图象文件的图象数据从最后一行开始,倒着逐行存储,并且每行的字节数为4的整数倍,不足部分补空字节(0)。
黑白图象:
每象素一位,象素值=0(黑)/1(白)。
256色图象:
每象素一个字节,象素值=调色板索引号。
真彩色图象:
每象素三个字节,象素值=B G R。注意这里的存放顺序是B G R,而非通常的R G B
顺序。
在此我们便可以知道,通过biBitCount就可以判断一个BMP图象文件的图象类型