说明: 以下这些是本人自己总结出来的,因为自己在图像数据的存储方面总是模糊不清,这样是不利于开发的,只有知道底层原理才能解决任何问题,通过下面的知识,你就可以触类旁通,解决bmp图片在lcd上的任意显示问题了。
一、BMP格式
- BMP取自位图Bitmap的缩写,也称为DIB(与设备无关的位图),是一种 独立于显示器的位图数字图像文件格式。
- 数据是没有经过压缩的,bmp格式文件大小一般比压缩过的(jpeg,png等)大。
- 数据为头部54字节+颜色数据。
二、颜色数据表示方法
- 采用三基色(红R,绿G,蓝B)构成像素的色彩值,通常每个基色占一个字节(十进制 0~255表示,十六进制0x00-0xff表示,二进制00000000-11111111表示 )。
- 对于RGB888(24位,透明度为0)来说,纯红色表示:0xff0000 纯绿色:0x00ff00 纯蓝色:0x0000ff 。
- 对于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天。如果有帮助的话,还请点个赞吧,写文章,需要如何把晦涩难懂的知识表达出来真的很不容易。