<b>位图文件内部初探</b>[VC/C++编程]
本文“<b>位图文件内部初探</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
最常用的几种图象文件格局怎样存储图象自从我在十四年前买回第一台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算法压缩的图象时也是无能为力的.
固然tiff是那么的复杂,但还是一种最好的跨平台格局.因为它非常机动,无论在视觉上还是其他方面,都能把任何图象编码成二进制情势而不丧失任何属性.
以上是“<b>位图文件内部初探</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |