BMP位图格式的内存存储格式
Posted 紫月小猫咪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BMP位图格式的内存存储格式相关的知识,希望对你有一定的参考价值。
**********************************************************************************************************
2018-05-29 实验室 晚上整理总结
参考博客:https://blog.csdn.net/q673327335/article/details/8432384
***********************************************************************************************************
BMP(全称Bitmap)是Window操作系统中的标准图像文件格式
可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
组成
典型的BMP图像文件由四部分组成:
1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
3:调色板,这个部分是可选的,有些位图需要调色板,有些位图比如真彩色图(24位的BMP)就不需要调色板;
4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
***********************************************************************************************************
1、彩色BMP图片
54个字节的图像头文件 + width*height*3的图像数据
数据排列方式:B G R(第一个像素点) B G R(第一个像素点) ... ... ...
2、灰度图BMP
54字节的图像头文件 + 1024个字节的调色板 + width*height的数据
***********************************************************************************************************
可以用besnew软件打开图片,查看内部存储格式
比如一张8192*2048的灰度图(有1024的颜色表)
存储格式: 低位 高位
1.位图文件头
0,1:42 4D 为位图的标志。如果转换成 ASCII 码的话就是 BM。
2-5:(01 00 04 36)H = 16,778,294(bytes),表示文件大小为16,778,294bytes,也可以通过查看文件大小信息知道。
6-9:(00 00 00 00)H为保留字。
10-13:(00 00 04 36)H = 1078D,文件起始位置标志,表示文件从第54+1024=1078位开始。
2.位图信息头
14-17:(00 00 00 28)H = 40D,表示位图信息头的长度,即为40 bytes。
18-21:(00 00 20 00)H = 8192D,表示位图宽度,即为8192 pixels。
22-25:(00 00 08 00)H = 2048D,表示位图高度,即为2048 pixels。存储方式为从最后一行先存,最后存第一行//高度值为负数,则表示存储顺序为从上到下
26-27:(00 01)H,表示设备级别
28-29:(00 08)H = 8D,表示位图色彩级别,即为 8位灰度图。
30-33:(00 00 00 00)H,表示压缩类型,0表示不压缩
34-37:(01 00 00 00)H = 16,777,216D,位图阵列表字节数,即为921600 bytes。
38-41:(00 00 00 00)H,表示水平分辨率
42-45:(00 00 00 00)H,表示垂直分辨率
46-49:(00 00 01 00)H,表示位图实际使用的颜色表中的颜色变址。
50-53:(00 00 00 00)H,表示位图显示过程中被认为重要颜色变址数。
3.颜色表
颜色表用于说明(灰度图)位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue;// 蓝色的亮度(值范围为0-255)
BYTE rgbGreen; // 绿色的亮度(值范围为0-255)
BYTE rgbRed; // 红色的亮度(值范围为0-255)
BYTE rgbReserved;// 保留,必须为0
} RGBQUAD;
我们平时看到的伪彩色图,可以对应着改变BGR的值,比如颜色表索引24,将BGR分别改为15,25,75等,就可以出现伪彩色图。
4.像素存储组织方式
BMP存储像素值的方式为从下至上,从左至右,紧随着文件头存储的字节为图像最下一行的数值,从左下角开始依次存储。
22 22 22 23 ... 为图像左下角像素的数值,依次向右存储,最后一行扫描完后,紧接着存储上一行,最后一个byte存储的是图像右上角像素的数值。
可用MATLAB读取BMP图片后对比内存存放方式,就一目了然了。
以上是关于BMP位图格式的内存存储格式的主要内容,如果未能解决你的问题,请参考以下文章