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图片后对比内存存放方式,就一目了然了。

原文地址:https://www.cnblogs.com/liulijin/p/9108099.html

时间: 2024-11-06 16:59:19

BMP位图格式的内存存储格式的相关文章

windows中BMP位图格式介绍

BMP图片,是Bitmap(位图)的简称,它是windows显示图片的基本格式.在windows下,任何格式的图片文件(包括视频播放)都要转化为位图才能显示出来.各种格式的图片文件也都是在位图格式的基础上采用不同的压缩算法生成的. 位图文件主要分为如下3个部分: 块名称 对应Window结构定义 大小(yte) 位图文件头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 40 RGB颜色阵列 BYTE* 由图像长宽尺寸决定 (1)位图文件头BITMAPFIL

BMP位图文件格式详解及编程建议

BMP文件渊源流长,虽然对JPG.PNG等格式图像文件来说,确实有点土,但是毕竟BMP文件格式相对简单,容易理解,至于BMP众多的位图格式也不能责怪微软,主要是早期谁也没料到图片技术会发展的这么快,而且每次升级还要兼容,所以只能如此了(有点麻烦但并不复杂).天缘撰写本文以便留档和各位编程爱好者参考. BMP位图文件的结构主要由:BMP文件头.位图信息头.颜色表和图形数据四个部分组成,对于24位.32位则没有色彩表字段,低位图则存在色彩索引表. 一.BMP的文件头结构 BMP文件头数据结构包含有B

数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)

引入CImage类的原因 原有的CBitmap 类只能处理BMP格式的图片,非常受限.而CImage可以处理JPGE.GIF.BMP.PNG等多种格式图片,扩展了图片处理功能且能与CBitmap 进行转换( 因为所载入的位图句柄都是HBITMAP,所以可相互转换),因此引入CImage类进行图像处理. CImage类简介 CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG.GIF.BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换. CImage提供增强型的

C语言实现将彩色BMP位图转化为二值图

CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位图二进制文件的格式和代码实现,至于诸如RGB色彩和调色板是什么的一些概念就不啰嗦了. BMP位图文件格式 BMP文件由文件头.位图信息头.调色板和图形数据四部分组成,真彩色图是没有调色板的.每部分的具体结构在代码中具体列出并解释. 结构体的对齐 定义文件头部各结构体时要注意对齐的问题,至于什么是结构体对齐,请看这篇博文,写的很详细http://www.cnblogs.co

gnu-ucos 加入 bmp 位图显示

昨天又下了点功夫弄了个在tft屏幕上显示bmp位图的.我选择的是24位tft真彩测显示方式所以也要选择真彩色位图.网上给出的16位位图数组无法使用.在csdn上下载了2个制作工具,一个是c代码的,一个是exe二进制文件感觉都不好用.无奈修改了那个c代码的自己弄了个制作 数组的小工具. 可以从github上clone下来(因为位图是微软的格式,所以这里就用了win下面的结构体来处理了): [email protected]:xushichao/bmptool.git 然后 就是得到320*240的

vc 加载bmp位图并显示的方法

方法一.显示位图文件 [cpp] view plaincopy HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T("xxx.bmp"),Image_Bitmap,0,0,Lr_CreateDibSection|Lr_DefaultSize|Lr_LoadFromFile); //加载bmp文件   xxx.bmp 就是要加载的图片名字 CBitmap bitmap; bitmap.Attach(hBitmap); //关联位图对象 CDC dcima

bmp位图

BMP文件由位图文件头.位图信息头.调色板和图像数据四部分组成 (1)位图文件头 1 typedef struct tagBITMAPFILEHEADER 2 { 3 WORD bfType; //位图文件的类型,必须为BM(1-2字节) 4 DWORD bfSize; //位图文件的大小,以字节为单位(3-6字节,低位在前) 5 WORD bfReserved1; //位图文件保留字,必须为0(7-8字节) 6 WORD bfReserved2; //位图文件保留字,必须为0(9-10字节)

位图引起的内存溢出OutOfMemory解决方案

作者:老帅 一.问题描述:Android下的相机在独自使用时,拍照没有问题,通过我们的代码调用时,也正常,但是更换了不同厂商的平板,ROM由Android4.0变成了Android4.1后,拍照出现了OutOfMemory异常,程序中断退出.如何解决这个问题呢? 二.先看看我们之前所写的代码 1) 调用系统相机(没有怀疑这里出错,代码略) 2)显示图片 mImageView = (ImageView) findViewById(R.id.imageView); fileName = mData.

常见图片格式详解系列(二)---BMP位图--

BMP BMP是windows的一种图片格式,其组织方式相对简单,一个简单表示bmp文件的头结构 (BITMAPFILEHEAER)+ 一个表示图片信息的结构(BITMAPINFOHEADER)+ 一个表示调色板的结构(可选).剩下的便是存储的每一个像素点对应的R,G,B值. BITMAPFILEHEADER WORD bfType:表示文件类型,该值必须是0x424D,即字符'BM',否则便不是BMP图片.DWORD bfSize:以字节为单位,表示整个图像文件的大小.如需要添加列表可继续从左