一.bmp文件介绍
1.简介
BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用广泛。它采用位映射存储格式,除了图像深度可选以外,在绝大多数应用中不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit、16bit及24bit。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
2.文件格式
BMP(bitmap) 文件由文件头、位图信息头、颜色信息和图 形数据 4 部分组成。文件头主要包含文件的大小、文件类型、 图像数据偏离文件头的长度等信息;位图信息头包含图像的 尺寸信息、图像用几个比特数值来表示一个像素、图像是否 压缩、图像所用的颜色数等信息。颜色信息包含图像所用到 的颜色表,显示图像时需用到几个颜色表来生成调色板,但 如果图像为真彩色,即图像的每个像素用 24 个比特来表示, 文件中就没有这一块信息,也就不需要操作调色板。文件中 的数据块表示图像的相应像素值,需要注意的是:图像的像 素值在文件中的存放顺序为从左到右,从下到上,也就是说, 在 BMP 文件中首先存放的是图像的最后一行像素,最后才存 储图像的第一行像素,但对于同一行的像素,则是按照先左边后右边的顺序存储的;另外一个需要关注的细节是:文件 存储图像的每一行像素值时,如果存储该行像素值所占的字 节数为 4 的倍数,则正常存储;否则,需要在后端补 0,凑足 4 的倍数
2.1位图头文件
//第一部分为位图文件头 BITMAPFILEHEADER,是一个
结构,其定义如下:
typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 位图文件的类型,必须为 BM
DWORD bfSize; // 位图文件的大小,字节单位
WORD bfReserved1; // 位图文件保留字,必须为 0
WORD bfReserved2; // 位图文件保留字,必须为 0
DWORD bfOffBits; // 位图文件头到数据的偏移
}BITMAPFILEHEADER ;
2.2位图信息头
//第二部分为位图信息头 BITMAPINFOHEADER,也是一
个结构,其定义如下:
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; // 该结构所占字节数
LONG biWidth; // 位图的宽度,像素单位
LONG biHeight; // 位图的高度,像素单位
WORD biPlanes; // 目标设备的位面数,必须为 1
WORD biBitCount; // 颜色深度,即每个像素所占的
位数
DWORD biCompression; // 位图的压缩类型
DWORD biSizeImage; // 位图的大小,字节单位
LONG biXPelsPerMeter; // 位图水平分辨率
LONG biYPelsPerMeter; // 位图的垂直分辨率
DWORD biClrUsed; // 位图实际使用的颜色表中
颜色数
DWORD biClrImportant; // 位图显示中比较重要的颜
色数
} BITMAPINFOHEADER;
2.3调色板
第三部分为调色板 RGBQUAD。当然这是对那些需要调
色板的位图文件而言的。有些位图,如真彩色图,是不需要
调色板的,BITMAPINFOHEADER 后直接是位图数据。
颜色表实际上是一个数组,共有 biClrUsed 个元素(如果
该值为零,则有 2biBitCount 个元素)。数组中每个元素的类
型是一个 RGBQUAD 结构,占 4 个字节,其定义如下:
typedef struct tagRGBQUAD
{
BYTE rgbBlue; // 该颜色的蓝色分量
BYTE rgbGreen; // 该颜色的绿色分量
BYTE rgbRed; // 该颜色的红色分量
BYTE rgbReserved; // 保留值
} RGBQUAD;
位图信息头和颜色表组成位图信息结构 BITMAPINFO, 其定义如下:
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader; // 位图信息头
RGBQUAD bmiColors[1]; // 颜色表
} BITMAPINFO
二.