匿名用户
1级
2014-05-16 回答
BMP是一种与硬件设备无关的图像文件格式,其支持1,4,8,16,24,32位的图像存储,并且支持非压缩和压缩这两种存储方式,数据是以Little Endian依次存储。由于历史的原因,存在Windows和OS/2两种类型的BMP,目前Windows类型的BMP基本上可是说是事实上的标准,下面均以此类型BMP文件为例,其文件主要由以下3部分组成: (1)文件头和信息头 typedef struct _tag_BMP_FILEHEADER{ WORD bfType; //2Bytes,必须为"BM",即0x424D DWORD bfSize; //4Bytes,整个BMP文件的大小 WORD bfReserved1; //2Bytes,保留字,可设为0 WORD bfReserved2; //2Bytes,保留字,可设为0 DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的偏移 } BMP_FILEHEADER; typedef struct _tagBMP_INFOHEADER{ DWORD biSize; //4Bytes,INFOHEADER结构体大小,存在其他版本INFOHEADER,用作区分 LONG biWidth; //4Bytes,图像宽度(以像素为单位) LONG biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1 WORD biBitCount; //2Bytes,图像像素位数 DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4 DWORD biSizeImage; //4Bytes,4字节对齐的图像数据大小 LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率 LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率 DWORD biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引 DWORD biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要 } BMP_INFOHEADER; (2)调色板数据(可选) 1,4,8位图像会使用调色板数据,其它不需要调色板数据,即调色板最多只需要256项(索引0 - 255),调色板数据通常采用如下数据结构: typedef struct _tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; (3)图像像素数据; 采用四字节对齐存放的方式。