位图文档内部初探

2008-02-23 05:35:43来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

最常用的几种图象文档格式怎样存储图象自从我在十四年前买回第一台pc以后,我就一直对电脑用1和0组成的数据流来存储那些复杂的信息很感兴趣。最初引起我注意的是当时曾很流行的印在杂志上的basic程式清单,他们带有很多数据段,您可将他们键入并运行,以建立其他的程式。从这里我明白了任何程式无论他多么复杂,也只但是是一系列的针对电脑微处理器的指令而已。接着,我对ascii码有了兴趣,然后是字处理文档格式,再后来吗,您就看到了图象。

   直至今天仍让我着迷的一种技术是位图文档存储。一个位图存储了电脑上能够再现一幅图象所需的信息。我们经常在显示器上看到图象,例如一幅美丽的日落,然而在电脑眼里他只是一堆0和1的组合。归根结底,也就是位图文档里的这些位和字节来告诉电脑这幅图象中每个象素该是什么颜色,然后电脑把位图中的颜色转化成和他的显示卡兼容的格式,最后输出到显示器上。

   这个过程中有趣的是电脑怎样解释位图中的数据,位图文档有多种格式,每种格式都有自己的方法对象素数据编码并给出此种格式所需要的一些其他信息,之所以windows95能够读取.bmp文档而不能读.gif文档,就是因为他的设计人员使paint程式能够对以.bmp格式存储的图象数据进行解码,而不是.gif。

   到这里。您一定很想知道一个位图文档里究竟是什么,一种格式同另一种又有什么不同?那么就让我们来简单地看看在pc机上常用的六种位图文档格式。当然更有其他的文档格式,例如对于矢量图像,就是存储一些再现图象的指令而不是每个象素的颜色数据,但是在这里讨论的这六种位图文档格式才是您平时工作最可能使用的。

  bmp文档

   bmp(bitmap的缩写)文档格式是windows本身的位图文档格式,所谓本身是指windows内部存储位图即采用这种格式。一个.bmp格式的文档通常有.bmp的扩展名,但有一些是以.rle为扩展名的,rle的意思是行程长度编码(runlengthencoding)。这样的文档意味着其使用的数据压缩方法是.bmp格式文档支持的两种rle方法中的一种。

   bmp文档可用每象素1、4、8、16或24位来编码颜色信息,这个位数称作图象的颜色深度,他决定了图象所含的最大颜色数。一幅1-bpp(位每象素,bitperpixel)的图象只能有两种颜色。而一幅24-bpp的图象能够有超过16兆种不同的颜色。

   下一页的图说明了一个典型.bmp文档的结构。他是以256色也就是8-bpp为例的,文档被分成四个主要的部分:一个位图文档头,一个位图信息头,一个色表和位图数据本身。位图文档头包含关于这个文档的信息。如从哪里开始是位图数据的定位信息,位图信息头含有关于这幅图象的信息,例如以象素为单位的宽度和高度。色表中有图象颜色的rgb值。对显示卡来说,假如他不能一次显示超过256种颜色,读取和显示.bmp文档的程式能够把这些rgb值转换到显示卡的调色板来产生准确的颜色。

   bmp文档的位图数据格式依赖于编码每个象素颜色所用的位数。对于一个256色的图象来说,每个象素占用文档中位图数据部分的一个字节。象素的值不是rgb颜色值,而是文档中色表的一个索引。所以在色表中假如第一个r/g/b值是255/0/0,那么象素值为0表示他是鲜红色,象素值按从左到右的顺序存储,通常从最后一行开始。所以在一个256色的文档中,位图数据中第一个字节就是图象左下角的象素的颜色索引,第二个就是他右边的那个象素的颜色索引。假如位图数据中每行的字节数是奇数,就要在每行都加一个附加的字节来调整位图数据边界为16位的整数倍。

   并不是任何的bmp文档结构都象表中所列的那样,例如16和24-bpp,文档就没有色表,象素值直接表示rgb值,另外文档私有部分的内部存储格式也是能够变化的。例如,在16和256色.bmp文档中的位图数据采用rle算法来压缩,这种算法用颜色加象素个数来取代一串颜色相同的序列,而且,windows还支持os/2下的.bmp文档,尽管他使用了不同的位图信息头和色表格式。

   pcx文档

   .pcx是在pc上成为位图文档存储标准的第一种图象文档格式。他最早出现在zsoft公司的paintbrush软件包中,在80年代早期授权给微软和其产品捆绑发行,而后转变为microsoftpaintbrush,并成为windows的一部分。虽然使用这种格式的人在减少,但这种带有.pcx扩展名的文档在今天仍是十分常见的。

   pcx文档分为三部分,依次为:pcx文档头,位图数据和一个可选的色表。文档头长达128个字节,分为几个域,包括图象的尺寸和每个象素颜色的编码位数。位图数据用一种简单的rle算法压缩,最后的可选色表有256个rgb值,pcx格式最初是为cga和ega来设计的,后来经过修改也支持vga和真彩色显示卡,现在pcx图象能够用1、4、8或24-bpp来对颜色数据进行编码。

   tiff文档

   pcx格式是任何位图文档格式中最简单的,而tiff(taggedimagefileformat)则是最难的一种。

   tiff文档含有.tif的扩展名。他以8字节长的图象文档头开始(ifh),这个文档头中最重要的成员是个指向名为图象文档目录(ifd)的数据结构的指针。Ifd是个名为标记(tag)的用于区分一个或多个可变长度数据块的表,标记中含有关于图象的信息。Tiff文档格式定义70多种不同类型的标记,有的用来存放以象素为单位的图象宽度和高度,有的用来存放色表(假如需要的话),当然还必须有用来存放位图数据的标记,一个tiff格式文档完全为他的标记所决定,而且这种文档结构极易扩展,因为您要附加一些特征只须增加一些额外的标记。

   究竟是什么使tiff文档如此复杂?一方面,要写一种能够识别所用不同标记的软件很困难。大多数tiff的阅读程式只能识别一部分标记,所以会出现这种情况:有时一个应用程式创建的tiff文档,另一个应用程式却不能使用。创建tiff文档的程式还可能会在文档中加一些只有他自己认识的标记,虽然tiff的阅读程式能够跳过那些他们不认得的标记,但这样做总是有可能影响到图象的质量。

   另一方面,一个tiff文档能够包含多个图象,每个图象都有自己的ifd和一系列标记。Tiff文档中的位图数据可能会用好几种方法来压缩,所以一个完备的tiff阅读程式应该有rle解压缩程式,lzw解压缩程式和其他一些算法的解压缩程式。然而更糟的是使用lzw的解码必须得到unisys公司的同意,且通常是需要付版税的。所以即使是一些相当不错的tiff阅读程式在他们碰到lzw算法压缩的图象时也是无能为力的。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 程式中导出Word文档简易方法

下一篇: 轻轻松松产生 Makefile