图像格式:BMP

参考:https://blog.csdn.net/zhongranxu/article/details/80259751

最近做项目,看到图片保存为BMP格式后,代码从54开始读取图像数据。

BMP_bytes = io.BytesIO()
img.convert('RGB').save(BMP_bytes, format='BMP')

bgr_buffer = bytes(BMP_bytes.getvalue()[54:])

解释:

BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源。Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持。

下面以Notepad++为分析工具,结合Windows的位图数据结构对BMP文件格式进行一个深度的剖析。

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:

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

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

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

Ø         位图数据(bitmap data):图像数据

下面结合Windows结构体的定义,通过一个表来分析这四个部分。

一般见到的图像以24位图像为主,即R、G、B三种颜色各用8个bit来表示,这样的图像称为真彩色,这种情况下是不需要调色板的,也就是所位图信息头后面紧跟的就是位图数据了。因此,常常见到有这样一种说法:位图文件从文件头开始偏移54个字节就是位图数据了,这其实说的是24或32位图的情况。这也就解释了按照这种程序写出来的程序为什么对某些位图文件没用了。

猜你喜欢

转载自blog.csdn.net/weixin_41770169/article/details/89453623