手把手 bmp 格式编解码(一)—— 什么是 bmp 图像?

1. 什么是 BMP 图像格式

1.1 概述

  BMP(Bitmap)是一种图像文件格式,也称为位图格式。这种格式可以存储图像的像素颜色和位置信息,并且不会在压缩图像时丢失任何信息。BMP 格式最初由 Microsoft 开发,随后成为 Windows 操作系统的标准图像格式之一。

  BMP 格式的历史可以追溯到 1980 年代初期,当时微软公司正在开发一种名为 Windows 的图形用户界面,需要一种能够存储位图图像的文件格式。于是,BMP 格式应运而生,并成为 Windows 操作系统的标准图像格式之一。在 BMP 格式出现之前,常用的图像格式有 GIF、JPEG 等。与这些格式不同的是,BMP 格式是一种无损的图像格式,即压缩后不会丢失任何像素信息,因此图像质量得到了保证。但是,由于该格式不支持压缩,因此文件大小通常较大,占用磁盘空间较多。

1.2 优缺点

优点:

  1. 图像质量高,没有压缩损失;
  2. 支持透明度和颜色深度等功能;
  3. 通用性好,可以在许多不同的软件和操作系统中使用。

缺点:

  1. 大部分使用场景不支持压缩,因此文件大小通常较大,占用磁盘空间较多;
  2. 不支持动画和透明图像等高级功能,因此在某些情况下可能不适用。

2. 常见 BMP 图像格式及文件头

  根据文件头结构的不同(BMP header 包含 file headerDIB header 两部分),具体地说,是 DIB 头不同,BMP 格式可以分为多个版本,包括 OS/2 Bitmap Header 格式、Windows BMP 格式、Windows V2、V3、V4 以及 Windows V5 BMP 格式等。这些版本在文件头结构和支持的压缩方式、颜色空间类型等方面有所不同,应根据实际需求选择适合的版本和参数。

  一般情况下,位图文件头(Bitmap file header)的结构较为统一,这部分数据块位于文件开头,用于进行文件的识别。典型的应用程序会首先普通读取这部分数据以确保的确是位图文件并且没有损坏。所有的整数值都以小端序存放(即最低有效位前置)。

字节数字段名描述
2文件类型用于标识BMP和DIB文件的魔数,一般为0x42 0x4D,即ASCII的BM
4文件大小BMP文件的大小(单位为字节)
2保留字段1保留;实际值因创建程序而异
2保留字段2保留;实际值因创建程序而异
4数据偏移量位图数据(像素数组)的地址偏移,也就是起始地址。

  DIB 头(全称是设备无关位图,Device Independent Bitmap)用于告诉应用程序图像的详细信息,在屏幕上显示图像将会使用这些信息。这部分数据块对应了 Windows 和 OS/2 中的内部使用的头结构以及其它一些版本的变体。但所有版本均以一个 DWORD 位(32 位)开始,用以说明该数据区块的大小,使得应用程序能够根据这个大小来区分该图像实际使用了哪种版本的 DIB 头结构。存在多种版本的头结构的原因是微软对 DIB 格式进行过多次扩展。下表即为所有不同版本的 DIB 头:

大小结构名称操作系统支持所加特性
12BITMAPCOREHEADEROS/2 和 3.0 版本以来的 Windows
64BITMAPCOREHEADER2OS/2添加半调网屏;添加 RLE 及霍夫曼 1D 压缩。
40BITMAPINFOHEADERWindows 3.0 及更高版本删除 RLE-24 及霍夫曼 1D 压缩;添加 16/32 位像素格式;添加可选的 RGB 位掩码。
52BITMAPV2INFOHEADER未公开删除可选的 RGB 位掩码;添加必选的 RGB 位掩码。Adobe Photoshop
56BITMAPV3INFOHEADER未公开添加必选的 Alpha 通道位掩码。Adobe Photoshop
108BITMAPV4HEADERWindows 95/NT4 及更高版本添加色彩空间类型和伽玛校正。
124BITMAPV5HEADERWindows 98/2000 及更高版本添加 ICC 色彩特性。

  下面是对三个典型版本的详细展开。

2.1 OS/2 Bitmap Header 格式

  OS/2 Bitmap Header 格式是较早的 BMP 格式,目前仍有广泛应用。文件头大小为 14 字节,DIB 头大小为 12 字节。该格式不支持压缩。其文件头结构如下:

字节数字段名描述
2文件类型文件类型为 “BM”(0x4D42)
4文件大小整个 BMP 文件的大小
2保留字段 1保留字段,必须设置为 0
2保留字段 2保留字段,必须设置为 0
4数据偏移量图像数据相对于文件头的偏移量
4DIB 头大小DIB 头的大小
2图像宽度图像的宽度,以像素为单位
2图像高度图像的高度,以像素为单位
2颜色平面数始终设置为 1
2每个像素的位数像素的位数,通常为 24

2.2 Windows V1 BMP 格式

  Windows BMP 格式是最常见的 BMP 格式,V1 是最初的版本,出于兼容性的考量,大多数应用程序使用较旧版本的 DIB 头保存文件。在不考虑 OS/2 的情况下,目前通用的格式为 BITMAPINFOHEADER 版本。文件头大小为 14 字节,DIB 头大小为 40 字节。该格式支持不同的压缩方式,包括无压缩、RLE-8、RLE-4 和 JPEG 压缩。其文件头结构如下:

字节数字段名描述
2文件类型文件类型为 “BM”(0x4D42)
4文件大小整个 BMP 文件的大小
2保留字段 1保留字段,必须设置为 0
2保留字段 2保留字段,必须设置为 0
4数据偏移量图像数据相对于文件头的偏移量
4DIB 头大小DIB 头的大小
4图像宽度图像的宽度,以像素为单位
4图像高度图像的高度,以像素为单位
2颜色平面数始终设置为 1
2每个像素的位数像素的位数,通常为 24
4压缩类型指定图像是否压缩,不压缩时值为 0
4图像数据大小图像数据的大小,以字节为单位
4水平分辨率每英寸的像素数
4垂直分辨率每英寸的像素数
4调色板大小调色板中颜色索引的数量
4重要颜色数图像中重要的颜色索引数

2.3 Windows V5 BMP 格式

  Windows Windows V5 BMP 格式是 Windows BMP 格式的最新版本,文件头大小为 138 字节,DIB 头大小为 124 字节。这个格式支持更多的压缩方式和颜色空间类型,并提供了更多的颜色掩码和色度值等信息,支持更多的颜色空间类型和 ICC 数据,并提供了更多的关于颜色空间的信息。文件头结构如下:

字节数字段名描述
2文件类型文件类型为 “BM”(0x4D42)
4文件大小整个 BMP 文件的大小
2保留字段 1保留字段,必须设置为 0
2保留字段 2保留字段,必须设置为 0
4数据偏移量图像数据相对于文件头的偏移量
4DIB 头大小DIB 头的大小
4图像宽度图像的宽度,以像素为单位
4图像高度图像的高度,以像素为单位
2颜色平面数始终设置为 1
2每个像素的位数像素的位数,通常为 24
4压缩类型指定图像是否压缩,不压缩时值为 0
4图像数据大小图像数据的大小,以字节为单位
4水平分辨率每英寸的像素数
4垂直分辨率每英寸的像素数
4调色板大小调色板中颜色索引的数量
4重要颜色数图像中重要的颜色索引数
4红色掩码红色通道的位掩码
4绿色掩码绿色通道的位掩码
4蓝色掩码蓝色通道的位掩码
4Alpha 通道掩码Alpha 通道的位掩码
4颜色空间类型指定颜色空间类型
36颜色空间端点特定颜色空间的边界,它定义了该空间内可以准确表示的颜色范围
4Gamma 红色校正值Gamma 红色校正值
4Gamma 绿色校正值Gamma 绿色校正值
4Gamma 蓝色校正值Gamma 蓝色校正值
4Intent指定颜色空间的使用意图
4ICC 数据包含颜色空间 ICC 数据的文件偏移量
4ICC 数据大小颜色空间 ICC 数据的大小
4保留字段 3保留字段,一般设置为 0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值