数字图像-图片格式-BMP格式

2020-05-30

BMP格式,是一种图片的格式。参考BMP格式百度百科

        位图(外语简称:BMP、外语全称:BitMaP)BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
        由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
        典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。
        BMP 是(Windows 位图) Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像。Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它不支持文件压缩,也不适用于 Web 页。 从总体上看,Windows 位图文件格式的缺点超过了它的优点。为了保证照片图像的质量,请使用 PNG 、JPEG、TIFF 文件。BMP 文件适用于 Windows 中的墙纸。
        优点:BMP 支持 1 位到 24 位颜色深度。
        BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。
        缺点: BMP 不支持压缩,这会造成文件非常大。

存储算法

BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图)是微软视窗图形子系统(Graphics Device Interface)内部使用的一种位图图形格式,它是微软视窗平台上的一个简单的图形文件格式。

图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)种颜色(其中位是表示每点所用的数据位)。8位图像可以是索引彩色图像外,也可以是灰阶图像。表示透明的alpha通道也可以保存在一个类似于灰阶图像的独立文件中。带有集成的alpha通道的32位版本已经随着Windows XP出现,它在视窗的登录和主题系统中都有使用,但是还没有多少图像编辑软件支持。

n位2n种颜色的包含调色板的位图近似字节数可以用下面的公式计算:

BMP文件大小 ,其中高度(height)和宽度(width)都以像素为单位。

需要注意的是上面公式中的54是位图文件的文件头,是彩色调色板的大小。 如果位图文件不包含调色板,如24位,32位位图,则位图的近似字节数可以用下面的公式计算:

BMP文件大小 ,其中高度(height)和宽度(width)都以像素为单位。

另外需要注意的是这是一个近似值,对于n位的位图图像来说,尽管可能有最多种颜色,一个特定的图像可能并不会使用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于。

如果想知道这些值是如何得到的,请参考下面文件格式的部分。

由于存储算法本身决定的因素,根据几个图像参数的不同计算出的大小与实际的文件大小将会有一些细小的差别。

1 - 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色)
4 - 16 色位图
8 - 256 色位图
16 - 16bit 高彩色位图
24 - 24bit真彩色位图
32 - 32bit 增强型真彩色位图

典型的文件格式

典型的位图文件格式通常包含下面几个数据块:

  位图头:保存位图文件的总体信息。
  位图信息:保存位图图像的详细信息。
  调色板:保存所用颜色的定义。
  位图数据:保存一个又一个像素的实际图像。
下面的部分将会详细地描述位图文件中保存的数据。需要注意的是这是标准位图的文件格式,其他一些位图图像可能根据生成文件的应用程序不同所使用格式可能会有细微的区别。

位图头

这部分是识别信息,典型的应用程序会首先普通读取这部分数据以确保的确是位图文件并且没有损坏。

  字节 #0-1 保存位图文件的标识符,这两个字节的典型数据是BM。
  字节 #2-5 使用一个dword保存位图文件大小。
  字节 #6-9 是保留部分,留做以后的扩展使用,对实际的解码格式没有影响。
  字节 #10-13 保存位图数据位置的地址偏移,也就是起始地址。

位图信息

这部分告诉应用程序图像的详细信息,在屏幕上显示图像将会使用这些信息,它从文件的第15个字节开始。

  字节 #14-17 定义以下用来描述影像的区块(BitmapInfoHeader)的大小。它的值是:40 - Windows 3.2、95、NT、12 - OS/2 1.x、240 - OS/2 2.x
  字节 #18-21 保存位图宽度(以像素个数表示)。
  字节 #22-25 保存位图高度(以像素个数表示)。
  字节 #26-27 保存所用彩色位面的个数。不经常使用。
  字节 #28-29 保存每个像素的位数,它是图像的颜色深度。常用值是1、4、8(灰阶)和24(彩色)。
  字节 #30-33 定义所用的压缩算法。允许的值是0、1、2、3、4、5。

0 - 没有压缩(也用BI_RGB表示)
1 - 行程长度编码 8位/像素(也用BI_RLE8表示)
2 - 行程长度编码4位/像素(也用BI_RLE4表示)
3 - Bit field(也用BI_BITFIELDS表示)
4 - JPEG图像(也用BI_JPEG表示)
5 - PNG图像(也用BI_PNG表示)

然而,由于大多数位图文件都是不压缩的,所以最常用的值是0。

  字节 #34-37 保存图像大小。这是原始(en:raw)位图数据的大小,不要与文件大小混淆。
  字节 #38-41 保存图像水平方向分辨率。
  字节 #42-45 保存图像竖直方向分辨率。
  字节 #46-49 保存所用颜色数目。
  字节 #50-53 保存所用重要颜色数目。当每个颜色都重要时这个值与颜色数目相等。

调色板

这部分定义了图像中所用的颜色。如上所述,位图图像一个像素接着一个像素储存,每个像素使用一个或者多个字节的值表示,所以调色板的目的就是要告诉应用程序这些值所对应的实际颜色。

典型的位图文件使用RGB彩色模型。在这种模型中,每种颜色都是由不同强度(从0到最大强度)的红色(R)、绿色(G)和蓝色(B)组成的,也就是说,每种颜色都可以使用红色、绿色和蓝色的值所定义。

在位图文件的实现中,调色板可以包含很多条目,条目个数就是图像中所使用的颜色的个数。每个条目包含4个字节:其中三个表示红色、绿色和蓝色,第四个字节没有使用(大多数应用程序将它设为0)。对于每个字节,数值0表示相应的颜色在当前的图像文件中没有使用,而数值255表示那个颜色使用最大的强度。

位图数据

这部分逐个像素表示图像。像素是从下到上、从左到右保存的。每个像素使用一个或者多个字节表示。如果一个图像水平线的字节数不是4的倍数,这行就使用空字节补齐,通常是ASCII码0。

范例: 有一张5*5的图片,应该会有25个pixels,但是因为5不是4的倍数所以会显示成: xxxxx000 xxxxx000 xxxxx000 xxxxx000 xxxxx000

x代表调色盘的编号 0代表Null_character

有一张4*4的图片,应该会有16个pixels,但是因为是4的倍数所以会显示成:

xxxx xxxx xxxx xxxx

其他

尽管文件大小比较大,但是位图文件的简单性、在微软视窗和其他地方的广泛使用以及这种格式的优秀文档标准以及没有专利约束,使得它成为其他操作系统图像处理程序能够读写的一种最为常用的格式。

————————————————
版权声明:本文为CSDN博主「wsfdl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wsfdl/article/details/7957370

原文地址:https://www.cnblogs.com/zhangchao0515/p/13023555.html