BMP文件格式

偶尔在网上看到大神的笔记,现系统的学习一遍BMP格式

选用的BMP文件为 灰色lena图

用EditPlus以十六进制打开图片:

BMP介绍

BMP文件,又叫位图,是Windows中使用的图片格式。

文件格式:

1、bmp文件头(bmp file header):提供文件的格式、大小等信息

2、位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

3、调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表

4、位图数据(bitmap data):就是图像数据

真彩色

24位图像,即R、G、B三种颜色各用8bit表示,称为真彩色,这种情况下不需要调色板,即位图信息后紧跟着的就是位图数据

预备知识

1. 在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据。如数据0x1756在内存中的存储顺序为:

                                  

 

 

 

这种存储方式称为小端方式(little endian) , 与之相反的是大端方式(big endian)。

2.  以下所有分析均以字节为序号单位进行。

   下面我们对从文件中拉出来的数据进行剖析:

文件头

Windows为bmp文件头作出如下定义:

typedef struct tagBITMAPFILEHEADER 
{  
	UINT16 bfType;    //文件类型,2Byte
	DWORD bfSize;  //文件大小, 4Byte
	UINT16 bfReserved1;   // 保留字段1,  2Byte
	UINT16 bfReserved2;  // 保留字段2, 2Byte
	DWORD bfOffBits;    // 数据与文件头的偏移量, 4Byte
} BITMAPFILEHEADER;

其中:

对照文件,我们可见:

1、1-2:42 4d 为“BM”,表示Windows支持的位图格式,即指是BMP文件

2、3-5: 36 04 01 00 即0X00010436 等于66614 约为65kb

3、6-9:00 00  00 00 保留字段1和2

4、a-d:36 04 00 00 即0X00000436等于1078,即数据从1078处开始

一共14个字节

信息头

Windows定义信息头结构体如下:

对照数据文件:

1、0e-11:28 00 00 00 即0x00000028 等于40,即信息头大小为40bit

2、12-15:00 01 00 00 即0x00000100等于256,即图像宽度为255像素

3、16-19:00 01 00 00 即0x00000100等于256,即图像高度为255像素,且这是一个正数,说明图像数据是从图像左下角到右上角排列的

4、1a-1b:0100 即0x00010,等于1,即颜色平面数为1

5、1c-1d:0800 即0x0008.等于8,即每个像素占8bit

6、1e-21:00 00 00 00 即0,BI_RGB格式

7、22-25:00 00 01 00 即0x00010000 等于65536.指图像大小

8、26-29:00 00 00 00 等于0.水平分辨率

9、2a-2d:00 00 00 00 等于0 垂直分辨率

10、2e-31:00 01 00 00 即0x00000100 等于256,指实际使用的颜色索引数256

11、32-35:00 00 00 00 即0,指重要的颜色索引数为0

至此,文件头+信息头 = 64Byte

调色板

一张映射表,布局想二维数组[N][4],N指总的颜色所引数,每行四个元素对应B、G、R和Alpha值,一个分量一个字节,若无透明通道,则Alpha为0

对照数据文件:

本图中,N=256.即256个颜色索引

索引 B  G R Alpha
0 00 00 00 00
1 01 01 01 00
2 02 02 02 00
3 03 03 03 00
4 04 04 04 00
5 05 05 05 00
..... ...... ...... ...... ......

一共256种颜色,每个颜色占一个字节,一共是1024个字节,加上文件头和信息头的54字节,一共是1078个字节,即在数据之前有1078个字节

位图数据

每个像素占一个字节,取得该字节后,以该字节为索引查询相应的颜色,并显示到相应的显示设备上,由于信息头中图像的高度为正数,故位图数据在文件中排列是从左下角到右上角,以行为主序排列的

参考

1、BMP文件格式详解

posted @ 2021-04-04 15:57  PamShao  阅读(1906)  评论(0编辑  收藏  举报