BMP图像存储格式由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“bmp格式图像文件”。
维基百科的BMP定义
BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图),是微软视窗图形子系统(Graphics Device Interface)内部使用的一种位图图形格式,它是微软视窗平台上的一个简单的图形文件格式。
图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)种颜色(其中位是表示每点所用的数据位)。8位图像可以是索引彩色图像外,也可以是灰阶图像。表示透明的alpha通道也可以保存在一个类似于灰阶图像的独立文件中。带有集成的alpha通道的32位版本已经随着Windows XP出现,它在视窗的登录和主题系统中都有使用。
文件大小计算
BMP文件通常是不压缩的,所需存储空间比较大。一个像素所占的字节数为n∕8字节,n是位深。文件大小可以根据以下公式近似计算:
BMP文件大小≈54+4*2n+(width*height*n)∕8;
54是位图文件的文件头,4*2n是调色板的大小(对于没有调色板的位图文件,则不存在这一项),最后一项是像素数据。由于存储算法决定的因素,实际文件大小和计算值可能有细微差别;因此使用的≈符号而不是等于号。
文件存储格式
BMP图像自推出以后,几经演进,存储格式也有所变化。下表详细描述了位图文件可能包含的数据。
结构体可名称 选 大小 用途 备注
位图文否 14字节
件头 存储位图文件通用信息
仅在读取文件时有用
存储位图详固定(存在7种DIB头 否 细信息及像不同版本)
素格式
紧接在位图文件头后
3或4 DWORD附加位定义像素格是(12或16字掩码 式
节)
仅在DIB头是BITMAPINFOHEADER时存在见调色板 备可变
注 定义图像数
据(像素数色深≤ 8时不能省略 组)所用颜色 填充区是 可变
A
结构体对齐 位图文件头中像素数组偏移量的产物
像素数否 可变
组 定义实际的像素数值 像素数据在DIB头和附加位掩码中定义。像素数组中每行均以4字节对齐
填充区是 可变
B
结构体对齐
DIB头中ICC色彩特性数据偏移量的产物
ICC色彩特性是 可变 数据
定义色彩特性 可以包含外部文件路径,由该文件来定义色彩特性
Remark:像素数组每行均以4字节对齐,这会影响我们怎么读取像素数据。在n≤ 8时,调色板是不可忽略的,这对于我们找到像素头是很重要的。(其他参数同样会影响我们找到像素头)
典型的文件格式
位图头:保存位图文件的总体信息 位图信息(DIB头):保存位图文件的详细信息 调色板:保存所用颜色的定义 位图数据:保存实际像素数据
这是标准位图的文件格式,其他的一些位图图像可能会有区别。
A 位图头(占用14个字节)
字节 #0-1 保存文件标识符,典型的为BM(存储数据 42 4D 代表的是B和M的ascii码)
字节 #2-5 保存文件大小
字节 #6-9 是保留部分,留作扩展
字节 #10-13 保存实际像素数据的起始位置(比如,36 00 00 00表示从第36H(54)字节开始为像素数据)
B 位图信息(占用40个字节,从第15个字节开始) #14-17 定义以下用来描述影像的区块大小 #18-21 保存水平像素个数 #22-25 保存竖直像素个数 #26-27 保存所用彩色位面个数 #28-29 每个像素位数(比如8位、24位)
#30-33 定义压缩算法。允许值是0,、1、2、3、4、5;0为没有压缩,大多数位图是不压缩的 #34-37 保存图像大小,不要和文件大小混淆 #38-41 水平方向分辨率 #42-45 竖直方向分辨率 #46-49 保存所用颜色数目 #50-53 保存所用重要颜色数目
C 调色板(占用4*2n字节数,n为位深)典型的位图文件使用RGB模型。
调色板,又叫颜色查找表,它包含了文件所要使用的颜色数。
对于一个只有16色的图像,调色板只要包括16个条目对应这16中颜色就行了。每一个条目包含4个字节:其中三个分别表示R、G、B三种颜色分量,第四个字节为保留字节(一般设为0)。
下面粘贴一段我在网上找到的关于调色板详细的介绍:
******************************************************************************* *******************************************************************************
调色板
调色板:调色板是特定图片可以使用的颜色列表。不同的图片文件格式具有不同的最大颜色数目。如果您的图片包含的颜色多于特定图片格式中提供的颜色,则多出的颜色会被调色板中的颜色替换。生成图像中的颜色可能看起来是扭曲的。这称为“调色板效果”。
我们先来说说三元色RGB概念。我们知道,自然界中的所有颜色都可以由红,绿,蓝(R,G,B)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如淡红。针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分,255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级的概念被称作量化。这样,根据红,绿,蓝各种不同的组合我们就能表示出
256*256*256,约1千6百万种颜色。这么多颜色对于我们人眼来已经足够了。下表是常见的一些颜色的RGB组合值。
RGB 25500 00255 02550 2552550 2550255 0255255 255255255 000 128128128
你大概已经明白了,当一幅图中每个象素赋予不同的RGB值时,就能呈现出五彩缤纷的颜色了,这样就形成了彩色图。对,是这样的,但实际上的做法还有些差别。让我们来看看下面的例子。
有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R,G,B三个分量表示,因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200*200*3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。
因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的R,G,B值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为色时,只需要标明0即可。让我们再来计算一下:16种状态可以用4位(bit)表示,所以一个象素要用半个字节。整个图象要用200*2 00*0.5,约20k字节,再加上表占用的字节为3*16=48字节.整个占用的字节数约为前面的1/6,省很多吧。这张RGB的表,即是我们常说的调色板(Palette),另一种叫法是颜色查找表LUT(LookUpTable),似乎更确切一些。Windows位图中便用到了调色板技术.其实是不光是Windows位图,许多图象文件格式如pcx,tif,gif等都用到了。所以很好地掌握调色板的概念是十分重要的.有一种图,它的颜色数高达256*256*256种,也就是说包含我们上述提到的R,G,B颜色表示方法中所有的颜色,这种图叫做真彩色图(TrueColor)。真彩色图并不是说一幅图包含了所有的颜色,而是说它具有显示所有颜色的能力,即最多可以包含所有的颜色。表示真彩色图时,每个象素直接用R,G,B三个分量字节表示,而不采用调色板技术,原因很明显:如果用调色板,表示一个象素也要用24位,这是因为每种颜色的索引要用24位(因为总共有2的24次方种颜色,即调色板有2的24次方行),和直接用R,G,B三个分量表示用的字节数一样,不但没有任何便宜,还要加上一个256*256*256*3个字节的大调色板。所以真彩色图直接用R,G,B三个分量表示,它又叫做24位色图。
************************************************************************************************************************************************************** D 位图数据
这部分逐个像素表示图像。像素是从下到上、从左到右保存的。像素每行均以4个字节对齐,如果字节数不是4的倍数,通常以空字节补齐。
范例: 有5*5的图片(一个像素只占一个字节的情况),存储时就是 xxxxx000;xxxxx000;xxxxx000;xxxxx000;xxxxx000。X是图片中实际有用的像素数据,0是填充的字节。
******************************************************************************* *******************************************************************************
灰度位图存储格式
灰度位图的存储格式与24位真彩色位图的存储格式基本相同。唯一的差别是,灰度位图比24位真彩色位图增加了一部分:调色板(颜色索引表)。因此,灰度位图的像素阵列的起始位置不是第(36)H=54个字节,而是第(436)H=1078个字节(注:本段假设所读到的灰度图每个像素为一个字节,所以,54+4×256=1078),同时灰度位图用一个字节来表示一个像素。
灰度图
把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。用灰度表示的图像称作灰度图。
除了常见的卫星图像、航空照片外,许多地球物理观测数据也以灰度表示。以位场图像为例,把位场表示为灰度图,需要将位场观测值灰度量化,即将场的变化范围转换成256阶的灰度范围。由于位场的动态变化范围非常大,磁场可达数万个纳特,重力场也可能在数百个重力单位内变化,所以在显示为图像前通常需要对位场观测值进行拉伸或压缩。[1]
如何把RGB真彩图转换为灰度图
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11(根据人眼的颜色敏感性加的权,对绿色最敏感,蓝色最不敏感)
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。