每天一点点音视频_bmp了解

BMP 文件格式,也被称作 位图图像文件(bitmap image file), 设备独立图像(DIB), 或者就是简单的叫做 位图(bitmap)。

BMP 文件格式能够存储二维数字图像,支持单色,彩色,支持几种颜色格式(color depth,每个像素使用多少位表示),可以选择是否压缩,是否有 alpha 通道,是否支持 color profile。

DIP

微软为了解决不同设备,不同应用之间图片数据的交换,定义了设备独立的图像文件格式,就是这个 BMP

文件结构

从大的方面来说, 文件分为两大部分, 头部的固定大小的数据结构,剩下的是可变大小的, 但是是有头部预先决定它的大小。所谓的不变是说所有的 BMP 文件的这部分大小都不变,可变意味着不同的文件这一部分会变。

一个比较蛋疼的问题是,文件的格式在长期使用中是不断在发展的进化的,所以就会有很多不同版本的结构,解析程序需要做兼容,这就高的很复杂了。

下面的表格是 BMP 文件结构的概括:

结构名字 | 是否必须 | 大小 | 用途 | 备注
-|-|-|-|-|-
BMP 文件头 | 是 | 14字节 | 存储图像文件的通用信息 | 在加载到内存后不需要了
DIB 头 | 是 | 固定大小(但是有7个不同的版本) | 存储位图的详细信息,定义像素格式 | 如果有 BMP 文件头,紧随其后,没有的话,就自己打头
额外的位掩码 | 否 | 3或4个双字(即12或16个字节) | 定义像素格式 | 只在DIP头是BITMAPINFOHEADER,并且压缩算法是BI_BITFIELDS 或 BI_ALPHABITFIELDS
颜色标 | 可是可否 | 可变大小 | 定义像素使用到的颜色 | 在颜色深度小于8位时必须
Gap1 | 否 | 可变大小 | 对齐结构 |
像素数据 | 是 | 可变大小 | 定义实际的像素数据 | 每一行的数据会通过留空字节来对齐到4个字节的倍数
Gap2 | 否 | 可变大小 | 对齐结构 |
ICC | 否 | 可变大小 | 为颜色管理定义颜色配置(color manager, 以后会说) | 也可以包含一个包含颜色配置的外部文件的路径

title: 每天一点点音视频_bmp_文件头