深入理解BMP图片数据存储方式

1 篇文章 0 订阅
1 篇文章 0 订阅

说明: 以下这些是本人自己总结出来的,因为自己在图像数据的存储方面总是模糊不清,这样是不利于开发的,只有知道底层原理才能解决任何问题,通过下面的知识,你就可以触类旁通,解决bmp图片在lcd上的任意显示问题了。

一、BMP格式

  1. BMP取自位图Bitmap的缩写,也称为DIB(与设备无关的位图),是一种 独立于显示器的位图数字图像文件格式。
  2. 数据是没有经过压缩的,bmp格式文件大小一般比压缩过的(jpeg,png等)大。
  3. 数据为头部54字节+颜色数据。

二、颜色数据表示方法

  1. 采用三基色(红R,绿G,蓝B)构成像素的色彩值,通常每个基色占一个字节(十进制 0~255表示,十六进制0x00-0xff表示,二进制00000000-11111111表示 )。
  2. 对于RGB888(24位,透明度为0)来说,纯红色表示:0xff0000 纯绿色:0x00ff00 纯蓝色:0x0000ff 。
  3. 对于RGB565(16位)来说,去掉了低位:R0,R1,R2 G0,G1 B0,B1。
    在这里插入图片描述

三、BMP头部54字节

(1)54 bytes = 位图文件头 Bitmap File Header (14 bytes) + 位图信息数据头 DIB Header (54 bytes)
位置代表存储的地址头部54字节地址为:0x00~0x35
尺寸代表占用字节数。
在这里插入图片描述
在这里插入图片描述

四、BMP图片数据存储分析

(1)用windows自带画图工具,画一张24位50x20的BMP图片,划分颜色区域。
在这里插入图片描述
(2)绿色数据 0x37 ff 42
在这里插入图片描述
(3)红色数据 0xff 10 40
在这里插入图片描述
(4)紫色数据: 0xb4 10 40
在这里插入图片描述
(5)蓝色数据:0x22 33 ff
在这里插入图片描述
(6)灰色数据:0xc3 c3 c3
在这里插入图片描述
(2)十六进制图像数据
颜色数据存储方式是从左到右,从下到上,小端序(低地址存放低位数据,高地址存放高位数据)存储的。
在这里插入图片描述
图4-1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

地址为:0x00~0xc15 一共0xc16 (3094)个字节,这与3x50x20+54=3054字节不一致,这是由于windows是 按4字节对齐造成的,没有对齐会填充字节(0x00)来对齐的。
在这里插入图片描述

五、结语

1.上面那张数据存储图片我花了3个多小编辑才完成的,整篇文章构思花了3天。如果有帮助的话,还请点个赞吧,写文章,需要如何把晦涩难懂的知识表达出来真的很不容易。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值