浅析BMP文件格式
1、BMP文件总体来说由四部分构成,分别为位图文件头、位图信息头、彩色表和图像数据阵列。知道了文件的组成那么大概说一下文件这几部分大小:
位图文件头大小为14字节,
位图信息头为40字节,
彩色表根据BMP图的不同(我感觉这里的不同指的就是平时说的单色位图、8位位图以及16位位图或者24位位图这种不同)而大小不同
图像数据阵列就是看图片的大小而不同了,接下来具体针对不同部分来进行解释,如下图:

1、位图文件头如下图有五个部分组成,依次进行解释:
1.bfType:2字节 表示位图类型,由于这里解析的是BMP文件,所以这两个字节为BM
2.bfSize:4字节 表示文件的大小
3.bfReserved1:2字节 这个是保留的,为0
4.bfReserved2:2字节 这个也是保留的,为0
5.bfOffBits:4字节 这个是说文件开始到实际图像数据之间的字节偏移量,我理解的文件包括四个部分,最后一个部分为实际图像数据,所以这个量指的就是前三个内容的大小

1、下图中的变量BITMAPINFO结构表示位图信息头,包括两个部分,分别解释:
1.bmiHeader 40字节 表示位图文件信息头 这个在步骤2进行详细解释
2.bmiColors 字节不定 表示彩色表 这个在步骤3进行详细解释

2、下图中表示的就是bmiHeader 位图信息头的组成部分,分别进行解释:
1.biSize 4字节 表示位图文件信息头的大小(为40 单位是字节)
2.biWidth 4字节 表示位图文件的宽度(像素)
3.biHeight 4字节 表示位图文件的高度(像素)
4.biPlanes 2字节 不太理解,一般为1
5.biBiCount 2字节 这个就是常说的几位位图,值为1/4/8/16/24/32
6.biCompression 4字节 表示位图文件的压缩方式,默认0 表示没有压缩
7.biSizeImage 4字节 表示图像的大小,当没有压缩的时候,这个值可以为0
8.biXPelsPerMeter 4字节 表示水平分辨率
9.biYPelsPerMeter 4字节 表示垂直分辨率
10.biCIrUsed 4字节 表示彩色表中的颜色索引数目
11.biCIrImportant 4字节 表示有重要影响到颜色索引数目

3、下图中表示彩色表中一个彩色快的结构,分别进行解释
1.rgbBlue 1字节 蓝色
2.rgbGreen 1字节 绿色
3.rgbRed 1字节 红色
4.rgbReserved 1字节 保留位0

4、说明一点:
当位图为单色位图的时候,有2个彩色快
当位图为4位位图的饿时候,有16个彩色快
当位图为8位位图的时候,有256个彩色快
当位图为24位位图的时候,没有彩色快
1、第四部分是图像数据类,一幅图的数据顺序是从左往右,然后从上往下,(举个例子2x2,顺序就是0,0 0,1 1,0 1,1 ),然后需要注意一点是windows读取文件一行字节数必须是4的倍数,所以不够4字节要补齐,然后就用到了下面图中的公式,下图中计算结果就是一行要用到的字节数,如下图:

2、说明一点:
当位图为单色位图时,8个像素占一个字节
当位图为4位位图时,4个像素占一个字节
当位图为8位位图时,1个像素占一个字节
当位图为24位位图时,1个像素占三个字节