BMP图片格式解析

BMP图片解析

  • 一、BMP图片格式
    • 1.BMP图片的组成
  • 二、BMP图片十六进制解析
    • 1、文件头
    • 2、信息头
    • 3、调色板
    • 4、图片数据

之前做了一个 BMP图片的中值滤波,也只是大概了解BMP图片格式怎样的,参考了很多资料,发现他们写的都挺好,但是他们写的再好也只是他们的,我看了也不会印象很深,索性再来比葫芦画瓢自己分析一遍,加深一下印象。

自己要分析bmp的话,随便找个bmp吧,下面贴的图下载下来不太对。

一、BMP图片格式

1.BMP图片的组成

BMP文件主要有四部分组成,位图头、位图信息、调色板、位图数据。
我比较喜欢把这四部分叫做,文件头,文件信息,调色板,图片数据。我觉得这样叫比较好理解各部分都是什么内容。
文件头:存放文件的相关信息,如文件类型,大小。使用前14字节
文件信息:就是图片宽高等信息
调色板:大小由颜色索引决定
图片数据:就是图片数据呗

什么是调色板?

例如一个图片只有黑白两色,黑色是FF,白色是00,要是用RGB像素来表示,那得多浪费空间啊。如果使用调色板,就可以用索引表示:0 0 0 …1 1 1
其中索引0表示00,白色,索引1表示FF,黑色
只用1位索引来表示像素值,多简单啊,得节省多少空间啊,这种表示方法就是用了调色板

看不懂的话可以参考这个

什么是魔数?就是文件类型的编码吧,如BMP用42 4D表示,放在文件的开头,魔数参考

二、BMP图片十六进制解析

图片采用16进制打开,图放在最下面了

1、文件头

如下,这是BMP的前14个字节

42 4D 36 EC 5E 00 00 00 00 00 36 00 00 00

a)前2个字节42 4D就是表示BM。
b)第3-6字节是BMP文件的大小,36 EC 5E 00,注意哦这是小端模式,读出来是0x005EEC36,对应十进制就是6220854,图片大小就是6220854字节
c)第7-10字节保留,以后拓展用,00 00 00 00
d)第11-14字节表示像素数据的偏移,表示第多少字节开始是图片像素值,这里是36 00 00 00,即0x36=54
BMP图片格式解析_第1张图片
前14字节
在这里插入图片描述

2、信息头

BMP图片格式解析_第2张图片

15-18字节是 BMP文件信息的大小,`0x00000028` 是 40 字节大小
19-22字节80 07 00 00表示图像宽度,十进制为1920
23-26字节38 04 00 00表示图像高度,十进制为1080
27-28字节01 00好像表示调色板个数,通常都是1
29-30字节18 00表示bpp,即一个像素用多少位表示,十进制为24
31-34字节00 00 00 00表示压缩类型,如下
	0(不压缩),1(BI_RLE8压缩类型),2(BI_RLE4压缩类型)
35-38字节00 EC 5E 00,表示图像大小,十进制为6220800
	前面第11-14表示像素值偏移,刚好0x36=54,第3-6字节是BMP文件的大小,6220854,
	有没有发现什么?
39-42字节是 Width resolution in pixels per meter,水平分辨率,每米像素数,本
	文是 00 ,所以不管它
43-47字节是 Height resolution in pixels per meter,垂直分辨率,每米像素数,
	本文是 00 ,所以不管它
47-50字节是颜色表中的颜色索引数(也就是颜色表中的颜色数),本文没有索引表,是真彩
	色(没有调色板的RGB模式称为真彩色),所以是00 
51-54字节表示对图像显示有重要影响的颜色索引数码,本文是00 ,代表全都重要。本文没
	用到索引表,不用管这个字段。
55-58这里其实就是图片数据了,但是在有调色板的图片中,这块表示调色板

BMP图片格式解析_第3张图片

3、调色板

4、图片数据

图中位置开始往后就是图片数据了,那这块00 00 00 00是图片的哪个位置呢?左下,左上,右下,右上?来修改一下这个值改成 FF FF FF FF FF FF发现图片左下角有三个白色像素,其实BMP的存储方式是从左向右,从下到上,开头的链接有这个存储方式示意图。
BMP图片格式解析_第4张图片
改数据开始的三个像素,作用在左下角
BMP图片格式解析_第5张图片
BMP图片格式解析_第6张图片
改数据最后的三个像素,作用在右上角
在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(图片视频区,人工智能,python,开发语言)