bmp格式研究

使用IconWorkShop 创建一个 8位的 bmp单色图

这里写图片描述

这里写图片描述

使用 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格式深入理解

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的整数倍。

如果这个像素的点是黑色,二进制00000000, 最高位为0。索引0x36的第一个值–>0x00000000

如果这个像素的点是黑色,二进制80000000, 最高位为1。索引0x36的第二个值–>0x00FFFFFF

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

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

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

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

下面是备注:

你所能用到的BMP格式介绍(一)

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

二、从简单的24位bmp开始

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

   我们使用常用的绘图软件创建一个16*16的24位bmp图像,如下图所示:

BMP文件格式详解

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

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

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

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

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

BMP格式详解

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

bmp格式解析

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

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

这里写图片描述

这里写图片描述

简单bmp图片处理工具——python实现

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图片!

【数字图像处理】一.MFC详解显示BMP格式图片

https://blog.csdn.net/Eastmount/article/details/18238863

第四部分就是实际的图像数据.对于真彩色图(24位位图 biBitCount=24),图像数据就是实际的RGB值;对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值.下面对2色、16色、256色和真彩色位图分别介绍:
(1).2色位图:当biBitCount=1时,用1位就可以表示该像素的颜色(0表示黑,1表示白),所以8个像素占1个字节;
(2).16色位图:当biBitCount=4时,用4为可以表示一个像素的颜色,所以2个像素占1个字节;
(3).256色位图:当biBitCount=8时,用1个字节表示1个像素,1个像素占1个字节;
(4).真彩色图:当biBitCount=24时,此时用3个字节表示1个像素,其中RGB各占1字节,由于没有颜色表,位图信息头后面是位图数据.

同时,注意以下几点:
1.由于Windows规定一个扫描所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.同时注意下面公式,计算只含位图数据的大小:biSizeImage=(((bi.biWidth*bi.biBitCount)+31)/(32*4))*bi.Height
在后面讲述获取文件的信息时会通过UE软件结合16进制数据进行详细讲解上面各个数据的具体含义.
2.BMP图片格式的数据是从下到上、从左到右读.即文件中最先读到的图像是最下面一行的左边第一个元素,即从左下角开始存储(0,0)点,从左下角到右上角存储数据.尤其是在图像几何变换平移、旋转时,我就犯过这样的错误,本想让图像从左下角向右上移动,结果刚好相反,后面也会通过实例加深大家的印象.
3.如果想使用C语言\C++显示图片,建议自定义个ImageStruct.h的头文件.包含BMP位图的位图文件头结构、位图信息头结构、位图颜色表3个结构,在实例变量操作.而使用MFC,因为在wingdi.h文件中系统已经定义了BMP图像的结构BITMAPFILEHEADER、BITMAPINFOHEADER,直接在View.h中用他俩实例定义即可.

.同时推荐大家阅读一位叫烟雨江南的作者的文章,个人感觉帮助很大
http://blog.csdn.net/xiajun07061225/article/details/6633938
同时该项目免费下载网址:
http://download.csdn.net/detail/eastmount/6848841

要识别图像中的字符,首先要会处理图像,把图像的信息读出来。这就必须先了解图像的结构,存储方式。清华大学出版的一本《数字图像处理编程入门》给了我不少帮助。第一章的Windows位图和调色板让我对bmp图像有了基本了解。对于彩色图,可以用RGB模型来表示。基本上所有颜色都可以用这三种颜色的组合来形成。但实际上也有一些差别,小于24位图都利用到了调色板,也就是一张R、G、B表,主要是为了节省存储空间

猜你喜欢

转载自blog.csdn.net/wowocpp/article/details/80781918
今日推荐