一、BMP文件
BMP 文件格式,又称为 Bitmap(位图),是 Windows 系统中广泛使用的图像文件格式。由于它可以不作任何变换地保存图像像素域的数据, 因此成为我们取得 RAW 数据的重要来源。Windows 的图形用户界面(graphical user interfaces) 也在它的内建图像子系统 GDI 中对 BMP 格式提供了支持。 BMP 文件的数据按照从文件头开始的先后顺序分为四个部分:
bmp 文件头(bmp file header) :提供文件的格式、大小等信息。
位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息
调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表 位图数据 (bitmap data):就是图像数据
二、比较不同位深度BMP文件
网上下载一张彩色照片
查看该图片信息,显示位深度24
通过电脑画图程序和PS分别将该图片保存为32位、16位彩色和256色、16色、单色的位图(BMP)文件
对比文件大小
256 | 16 | 单色 | 32色 | 16色 |
3.51MB | 7.03MB | 450KB | 14.0MB | 3.51MB |
可以看出只更换颜色数量对存储大小基本没有影响,但如果改变色彩位深度就会改变存储大小。
文件结构
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节(位图数据,即图像数据,Data Bits 或Data Body)阵列,它具有如下所示的形式。
位图文件的组成
结构名称 符 号
位图文件头 (bitmap-file header) BITMAPFILEHEADER bmfh
位图信息头 (bitmap-information header) BITMAPINFOHEADER bmih
彩色表 (color table) RGBQUAD aColors[]
图像数据阵列字节 BYTE aBitmapBits[]
偏移量 域的名称 大小 内容
文件信息头BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER { /* bmfh */
UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
其中
bfType | 说明文件的类型,该值必需是0x4D42,也就是字符’BM’。 |
---|---|
bfSize | 说明该位图文件的大小,用字节为单位 |
bfReserved1 | 保留,必须设置为0 |
bfReserved2 | 保留,必须设置为0 |
bfOffBits | 说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。 |
位图信息头BITMAPINFOHEADER
结果体定义如下
typedef struct tagBITMAPINFOHEADER { /* bmih */
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
其中
biSize | 说明BITMAPINFOHEADER结构所需要的字数。 |
---|---|
biWidth | 说明图象的宽度,以象素为单位。 |
biHeight | 说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值 |