bmp格式研究

匿名 (未验证) 提交于 2019-12-03 00:34:01

使用 HexEditor Neo 工具 查看 生成的 BMP文件:

看图:
图中的 0x00 到 0x35 共0x36个字节,0x36 = 54 为 BMP 文件头。
接下来的为调色板:

4个字节为00 00 00 00 对应:00000000( 数值:0x00000000) 黑色
再接下来的
4个字节为FF FF FF 00 对应: FFFFFF00 ( 数值:0x00FFFFFF) 白色

调试板之后的为象素数据:
0F F0 FE 00
对应的是 最下面一行:

BMP数据如下:

42 4d 5e 00 00 00 00 00 00 00 3e 00 00 00 28 00 00 00 18 00 00 00 08 00 00 00 01 00 01 00 00 00 00 00 20 00 00 00 c3 0e 00 00 c3 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff 00 0f f0 fe 00 7f 3f 1f 00 fe fc f8 00 55 0f aa 00 80 ff ff 00 fc f8 f0 00 ff 00 ff 00 00 ff 00 00 

Bmp格式,关于BITMAPFILEHEADER 和 BITMAPINFOHEADER 不说了,网络上全都有。

从0x36字节开始说起,根据bmp不同的格式,内容有所不同:

先谈谈8bit Bitmap (Monochrome Bitmap),建议使用像素1*1的文件进行分析。8bit文件只有两种颜色:白或者黑。需要定义彩色表,结构就是RGBQUAD。 因为黑白两种,所以从0x36开始需要 2 * 4 bytes,1个RGBGUAD的大小是4。 数据分别为:

00000000( 数值:0x00000000) 黑色

FFFFFF00( 数值:0x00FFFFFF) 白色

因为数据小端排列

0x3E开始是真正的数据,该数据必须是4的整数倍。

如果定义像素是1*2, 最高两位有4种选择: 00000000, 80000000, C0000000, 40000000。

如果设置像素是1*3, 就会变更最高的3位

所以一个整形最大允许32个像素1*32。

但是注意高度只能为1。如果像素是2*1,数据是8,而不仅仅是4。

https://www.cnblogs.com/ZXYloveFR/archive/2012/08/06/2625225.html

二、从简单的24位bmp开始

   bmp是最常见也是编码方式最简单的图片格式,这里不说明一幅图片是怎么显示在电脑上的,那不是多媒体技术研究的问题,我们来研究bmp的格式问题,为了使各位能够最快的了解bmp格式,我们从24位的一个16*16的小图像开始。     我们使用常用的绘图软件创建一个16*16的24位bmp图像,如下图所示: 

https://blog.csdn.net/o_sun_o/article/details/8351037
也即我们见到的第一个像素60是图像最左下角的数据,第二个人像素60为图像最后一行第二列的数据,…一直到最后一行的最后一列数据,后面紧接的是倒数第二行的第一列的数据,依此类推。

如果图像是24位或是32位数据的位图的话,位图数据区就不是索引而是实际的像素值了。下面说明一下,此时位图数据区的每个像素的RGB颜色阵列排布:

24位RGB按照BGR的顺序来存储每个像素的各颜色通道的值,一个像素的所有颜色分量值都存完后才存下一个下一个像素,不进行交织存储。

32位数据按照BGRA的顺序存储,其余与24位位图的方式一样。

像素的排布规则与前述一致。

https://blog.csdn.net/u012877472/article/details/50272771

(5)实例分析
如下的4x4像素的位图

经过UE打开成16进制文件后,显示如下:

https://www.cnblogs.com/zyp4614/p/6917943.html

https://blog.csdn.net/jemenchen/article/details/52658476

VC创建bmp 图标,imagelist 制作 /生成 /工具栏
今天学树形控件TreeContral 的时候要用到icon图片,到网上下载了几个图片导入发现有问题,最后百度找了一款制作icon图片的工具Axialis IconWorkshop;下载就可以制作

icon图片!

文章来源: bmp格式研究
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!