BMP图片
BMP是一种图形格式,能被许多应用程序所支持。可以通过C程序对BMP图片进行查看与修改操作。
BMP组成结构
BMP由4部分组成,分别是位图文件头、位图信息头、调色板、位图数据。
1.位图文件头(bitmap-file header)
位图文件头共有14个字节,按顺序排列内容如下:
1>UINT bfType 是文件标识,共两个字节。Windows中此字段总为"BM".
2>DWORD bfSize 是文件大小,共四个字节。
3>UINT bfReserved1 是保留字符,共两个字节,通常是0。
4>UNIT bfReserved2 也是保留字符,共两个字节,通常是0.
5>DWORD bfOffBits 是偏移量,共四个字节,表示从文件头开始到实际的图像数据之间的字节的距离偏移量。
2.位图信息头(bitmap-information header)
位图文件头的字节数并不确定,大多数情况下是40个字节,按常见40个字节的顺序排列内容如下:
1>DWORD biSize 是位图信息头的长度,共四个字节。
2>LONG biWidth 是图像宽度,共四个字节。
3>LONG biHeight 是图像高度,共四个字节。
4>WORD biPlanes 是图像面数,共两个字节,这个值通常为“1”.
5>WORD biBitCount 是图片像素位数,共两个字节。一般只有6种情况:
1表示单色位图,4表示16色位图,8表示256色位图,16表示16位高彩色位图,24表示24位真彩色位图(最常见),32表示32位增强真彩色位图。
6>DWORD biCompression 是压缩种类,共四个字节。一般只有四种情况:
0表示不压缩,1表示RLE8压缩,2表示RLE4压缩,3表示每个像素值由指定的掩码决定。
7>DWORD biSizelmage 是位图数据大小,共四个字节。该数据必须是4的倍数,若不为4的倍数则用0补齐。
8>LONG biXPelsPerMeter 是水平分辨率,共四个字节,单位为像素/米.
9>LONG biYPelsPerMeter 是垂直分辨率,共四个字节,单位为像素/米.
10>DWORD biClrUsed 表示位图用到的颜色数,共四个字节。0表示使用全部颜色,也可以用2^x(颜色位数)来表示。
11>DWORD biClrImportant 表示重要的颜色数,共四个字节。0表示所有颜色都重要。在一些情况下若不能显示所有颜色,该值会辅助驱动程序显示颜色。
3.调色板(color table)
调色板是单色、16色、256色图像文件所特有的,相对应的调色板大小为2、16、256.调色板以4字节为单位,按照RGB的形式,每4个字节存放一个颜色值。按顺序排列内容如下:
1>BYTE rgbBlue 表示蓝色分量,一个字节。
2>BYTE rgbGreen 表示绿色分量,一个字节。
3>BYTE rgbRed 表示红色分量,一个字节。
4>BYTE rgbReserved 为保留值,一个字节,通常是0.
4.位图数据(bitmap data)
若采用调色板,则位图数据是在调色板中的编号,否则就是实际RGB值。
参考资料
1.位图文件(BMP)格式以及Linux下C程序实现 - 我心狂野 - 博客园 (cnblogs.com)
2.linux 显示bmp文件大小,Linux 下查看bmp图片的基本信息_马华兴的博客-CSDN博客
3.BMP文件结构 - kingmoon - 博客园 (cnblogs.com)
4.(8 封私信 / 72 条消息) bmp是怎样通过二进制数据进行编码的? - 知乎 (zhihu.com)