图像BMP格式介绍

时间:2022-11-06 10:02:56

图像BMP格式说明

     BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit4bit8bit24bitBMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

     由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式

图像BMP文件结构以及结构说明

      典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。

     具体数据举例,如某BMP文件开头:
424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 00000100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 00000000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F184F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 …. ….

     BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。

2.1图像文件头
1 1(这里的数字代表的是”,即两个字节,下同)图像文件头。424Dh=’BM’,表示是

        Windows支持的BMP格式。
22-3:整个文件大小。4690 0000,为00009046h=36934
34-5:保留,必须设置为0
46-7:从文件开始到位图数据之间的偏移量。46000000,为00000046h=70,上面的文件

        头就是35=70字节。
58-9:位图图信息头长度。
610-11:位图宽度,以像素为单位。8000 0000,为00000080h=128
712-13:位图高度,以像素为单位。9000 0000,为00000090h=144
814:位图的位面数,该值总是10100,为0001h=1

2.2 位图信息头
915:每个像素的位数。有1(单色),416色),8256色),1664K色,高彩色), 

       2416M色,真彩色),324096M色,增强型真彩色)。10000010h=16
1016-17:压缩说明:有0(不压缩),1RLE 88RLE压缩),2RLE44RLE

       压缩,3Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行

       压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5

       图中0300000000000003h=3
1118-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于位图宽度

       ×位图高度×每个像素位数。0090000000009000h=80×90×2h=36864
1220-21:用象素/米表示的水平分辨率。A00F 00000000 0FA0h=4000
1322-23:用象素/米表示的垂直分辨率。A00F 00000000 0FA0h=4000
1424-25:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。
1526-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要

2.3彩色板
1628-35:彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值:
           1字节用于蓝色分量
           1字节用于绿色分量
           1字节用于红色分量
           1字节用于填充符(设置为0)
           对于24-位真彩色图像就不使用彩色板,因为位图中的RGB值就代表了每个象素的颜色。如,彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
          00FB 0000FB00h=1111100000000000(二进制),是红色分量的掩码。
          E007 0000为 07E0h=0000011111100000(二进制),是绿色分量的掩码。
          1F00 0000001Fh=0000000000011111(二进制),是红色分量的掩码。
          0000 0000总设置为0
      将掩码跟像素值进行“与”运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取565位分别就是rgb分量值。取出分量值后把rgb值分别乘以848就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。

2.4图像数据阵列
17)17-...:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而

                     最后一个字节表示位图右上角的象素。