怎么判断BITMAP是彩色的还是灰度的?(5分)

  • 主题发起人 主题发起人 cuiax
  • 开始时间 开始时间
有用吗?往下看。
=================
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图象文件的图象类型
 
接受答案了.
 
后退
顶部