BMP | Version Compare

原创 2007年09月18日 09:49:00

BMP |

Version Compare

Back to page history

Become a member of the cnBeta 百科 community.
Already a member? Sign in
Version User Scope of changes
Jun 28, 1:01 PM EDT (current) Anonymous 2 words added, 13 words deleted, 3 images added, 3 images deleted
Jul 2, 9:18 AM EDT vulcano 251 words added, 3 images added

Changes

Key:  Additions   Deletions
BMP取自位图BitMaP的缩写,也称为DIB(与BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图)是无关的位图)是微软视窗图形子系统GDI)内部使用的一种位图格式,它是微软视窗平台上的一个简单的图形文件格式。 图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)种颜色(其中位是表示每点所用的数据位)。8位图像可以是索引彩色图像外,也可以是灰阶图像。表示透明alpha通道也可以保存在一个类似于灰阶图像的独立文件中。带有集成的alpha通道的32位版本已经随着视窗XP出现,它在视窗的登录和主题系统中都有使用,但是还没有多少图像编辑软件支持。

//

存储算法

BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。例如,一个800×600的24位几乎占据1.4MB空间。因此它们通常不适合在因特网或者其它低速或者有容量限制的媒介上进行传输。 根据颜色深度的不同,图像上的一个像素可以用一个或者多个字节表示,它由n/8所确定(n是位深度,1字节包含8个数据位)。图片浏览器等基于字节的ASCII值计算像素的颜色,然后从调色板中读出相应的值。更为详细的信息请参阅下面关于位图文件的部分。 n位2n种颜色的位图近似字节数可以用下面的公式计算: BMP文件大小 /approx 54+4 /cdot 2^n+/frac{width /cdot height /cdot n}{8}/approx 54+4 /cdot 2^n+/frac{width /cdot height /cdot n}{8},其中高度和宽度都是像素数。 需要注意的是上面公式中的54是位图文件的文件头4 /cdot 2^n4 /cdot 2^n是彩色调色板的大小。另外需要注意的是这是一个近似值,对于n位的位图图像来说,尽管可能有最多2n中颜色,一个特定的图像可能并不会使用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于4 /cdot 2^n4 /cdot 2^n。 如果想知道这些值是如何得到的,请参考下面文件格式的部分。 由于存储算法本身决定的因素,根据几个图像参数的不同计算出的大小与实际的文件大小将会有一些细小的差别。

典型的文件格式

典型的位图文件格式通常包含下面几个数据块: 位图头:保存位图文件的总体信息。 位图信息:保存位图图像的详细信息。 调色板:保存所用颜色的定义。 位图数据:保存一个又一个像素的实际图像。 下面的部分将会详细地描述位图文件中保存的数据。需要注意的是这是标准位图的文件格式,其它一些位图图像可能根据生成文件的应用程序不同所使用格式可能会有细微的区别。

位图头

这部分是识别信息,典型的应用程序会首先普通读取这部分数据以确保的确是位图文件并且没有损坏。 字节 #1-2 保存位图文件的标识符,这两个字节的典型数据是BM 字节 #3-6 使用一个dword保存位图文件大小。 字节 #7-10 是保留步部分,实际的值根据生成它们的应用程序不同而不同。 字节 #11-14 保存位图数据位置的地址偏移,也就是起始地址。

位图信息

这部分告诉应用程序图像的详细信息,在屏幕上显示图像将会使用这些信息,它从文件的第15个字节开始。 字节 #15-18 定义头的大小。它的值是:40 - Windows V3、12 - OS/2 V1、64 - OS/2 V2、108 - Windows V4、124 - Windows V5 字节 #19-22 保存位图宽度(以像素个数表示)。 字节 #23-26 保存位图高度(以像素个数表示)。 字节 #27-28 保存所用彩色位面的个数。不经常使用。 字节 #29-30 保存每个像素的位数,它是图像的颜色深度。常用值是1、4、8和24。 字节 #31-34 定义所用的压缩算法。允许的值是0、1、2、3、4、5。 0 - 没有压缩(也用BI_RGB表示)
1 - 行程长度编码 8位/像素(也用BI_RLE8表示)
2 - 行程长度编码4位/像素(也用BI_RLE4表示)
3 - Bit field(也用BI_BITFIELDS表示)
4 - JPEG图像(也用BI_JPEG表示)
5 - PNG图像(也用BI_PNG表示)
然而,由于大多数位图文件都是不压缩的,所以最常用的值是0。 字节 #35-38 保存图像大小。这是原始(:en:raw)位图数据的大小,不要与文件大小混淆。 字节 #39-42 保存图像水平方向分辨率。 字节 #43-46 保存图像竖值方向分辨率。 字节 #47-50 保存所用颜色数目。 字节 #51-54 保存所用重要颜色数目。当每个颜色都重要时这个值与颜色数目相等。

调色板

这部分定义了图像中所用的颜色。如上所述,位图图像一个像素接着一个像素存储,每个像素使用一个或者多个字节的值表示,所以调色板的目的就是要告诉应用程序这些值所对应的实际颜色。 典型的位图文件使用RGB彩色模型。在这种模型中,每种颜色都是由不同强度(从0到最大强度)的红色(R)、绿色(G)和蓝色(B)组成的,也就是说,每种颜色都可以使用红色、绿色和蓝色的值所定义。 在位图文件的实现中,调色板可以包含很多条目,条目个数就是图像中所使用的颜色的个数。每个条目包含4个字节:其中三个表示红色、绿色和蓝色,第四 个字节没有使用(大多数应用程序将它设为0)。对于每个字节,数值0表示相应的颜色在当前的图像文件中没有使用,而数值255表示那个颜色使用最大的强 度。

位图数据

这部分逐个像素表示图像。像素是从下到上、从左到右保存的。每个像素使用一个或者多个字节表示。如果一个图像水平线的字节数不是4的倍数,这行就使用空字节补齐,通常是ASCII码0。

其它

尽管文件大小比较大,但是位图文件的简单性、在微软视窗和其它地方的广泛使用以及这种格式的优秀文档标准以及没有专利约束,使得它成为其它操作系统图像处理程序能够读写的一种最为常用的格式。 X Window System使用类似的.XBM格式表示一位黑白图像以及.XPMpixelmap)表示彩色图像。另外还有一种.RAW格式,它除了保存原始数据之外没有任何其它信息。其它还有Portable Pixmap file format.PPM)和Truevision TGA.TGA),但是它们用得很少或者只用于特殊目的。尽管其它格式也保存为“位图”(与矢量图不同),但是它们使用数据压缩或者颜色索引,所以它们不是严格意义上的位图。 由于包含有冗余信息,许多BMP文件使用类似于ZIP这样的无损数据压缩算法能够取得很好的压缩效果。

 

LeetCode 165: Compare Version Numbers

Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 vers...
  • sunao2002002
  • sunao2002002
  • 2015年05月19日 12:28
  • 1872

leetcode 165 Compare Version Numbers C++

题目有一点没说明白,就是这个‘.’可能不止一个,可能有好多个,比如1.1.1.1.1.1.1 所以方式就是把所有的数字都提取出来,并且将两个数组用0对齐。 然后再比较。 int comp...
  • a2331046
  • a2331046
  • 2016年08月18日 21:24
  • 222

PHP实现函数version_compare

自己写的,肯定还有更加简便的方法。。。。
  • datoucang
  • datoucang
  • 2017年03月10日 22:37
  • 637

LeetCode165——Compare Version Numbers

题目 Compare two version numbers version1 and version1. If version1 > version2 return 1, if vers...
  • booirror
  • booirror
  • 2015年01月16日 15:43
  • 3282

php版本比较函数version_compare()

php中比较php版本,一般用version_compare()函数,帮助文档见:http://php.net/manual/en/function.version-compare.php 用途:C...
  • wlywly1987
  • wlywly1987
  • 2011年04月11日 13:09
  • 9078

LeetCode - 165. Compare Version Numbers

比较两个版本号的大小,首先自然是把两个String以"."分离开来,然后对它们一个一个进行比较。注意当其中的一个版本号长度比较小的时候,就在比较中将它设置为0,整体的代码如下: public cla...
  • shenzhu0127
  • shenzhu0127
  • 2016年07月21日 11:30
  • 151

[Leetcode165] Compare Version Numbers

Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 ver...
  • sbitswc
  • sbitswc
  • 2015年08月16日 04:50
  • 315

【leetcode 字符串处理】Compare Version Numbers

leetcode新题,Compare Version Numbers,字符串处理。题意:题意很清晰,就是比较“版本号”大小,给定的版本号version1和version2是字符串类型的,当versio...
  • u012162613
  • u012162613
  • 2014年12月18日 00:53
  • 5675

[Java]Leetcode165 Compare Version Numbers

[Java]Leetcode165 Compare Version Numbers
  • fumier
  • fumier
  • 2015年04月16日 14:03
  • 703

[165] Compare Version Numbers

给定两个使用“.”分割的版本号,实现comparable接口(相当于)。
  • camlot_
  • camlot_
  • 2016年07月28日 10:48
  • 172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BMP | Version Compare
举报原因:
原因补充:

(最多只允许输入30个字)