|
||||
16色PCX图像文件的恢复杨军 |
|
PCX格式是一种标准的文件压缩格式,许多图像编辑软件都能处理这种 格式,如:CoreIDraw、Microgufx、Designe和P C Paint brush等等,如果能在自己的应用程序中应用它,则可 以使自己的用户界面更加友好。《计算机用户》1993年第七期上“16/ 256色PCX文件的解码与恢复”一文,介绍了256色PCX图像文件的 恢复,对16色只是提了一下,而事实上16色PCX文件并不像256色图 像文件那么简单。本文将介绍用TURBO C和TURBO PASCAL 实现PCX图像文件的恢复方法。 首先,不论是单色、16色还是256色,PCX图像都有一个128字 节的文件头,在此文件头中包含了PCX文件的标志,及有关图像大小、颜色 等信息(见表)。我们可以用C的结构或PASCAL的记录来存取各项内容: 紧接于文件头后的为文件体、存储压缩后的图像数据,对于256色PC X文件则在文件后附有一个768字节的彩色表,这可以从文件尾起倒数第7 69个字节来识别,如果它为0XOC则为256色PCX文件,否则为16 色或单色。 ---------------------------------- 偏移量 字节数 含义 1H 1 总是0Xcam为PCX文件的标志 2H 1 表示由那个版本的Pcprintbrush生成 3H 1 总为1表示采用“同值”长度编码 4H 1 每个像素所占位数 5H 8 右上、右下角坐标 13H 4 所用的分辨率 17H 48 彩色表项 65H 1 保留 66H 1 位平面数 67H 1 解码后的一行中一个位平面所占字节数 68H 2 表示采用灰度还是彩色调色板 70H 58 --- ---------------------------------- 文件头内容 PCX文件体是采用“同值”长度编码技术压缩的,其文件数据由一系列 索引数据和图像数据所组成。如果索引数据的最高位是“11”,则该字节中 低六位表示图像文件中的下~字节的重复次数,否则该字节就是图像数据,是 原样写入文件的。这里值得注意的是:16色PCX文件是以显示区四个位平 面的对应行按0、1、2、3的顺序排列,然后一行320个字节放在一起压 缩的,也就说这320个字节中的“同值”数据会被压缩在一起,但上一行的 末尾如果和下一行的头是“同值”的并不压缩在一起,则它一次只压缩一行, 这一点并不像有的资料中所介绍的那样,一个位平面中的一行80个字节放在 一起压缩。文件头中第67个字节的内容表示解码后一行中一个位平面所占字 节数,也就是单色PCX文件解码后一行的字节数。仔细分析一下所附程序的 readpcxltine过程就会理解这一点。 要把解码后的图像数据显示在屏幕上,可以采用TURBO C和TUR BO PASCAL的putimge函数,这个函数将缓冲区的位图像放在 屏幕上指定的位置。该缓冲区的前四个字节为位图像的宽和高,其位图像本身 与PCX文件解码后是相似的。不同的是位平面的放置位置不同。 解码后的PCX的一行的映象如图: -------------------------- 0page 1page 2page 3page 一行 -------------------------- 0 80 160 240 320 而putimge的缓冲区;位图像映像应为: -------------------------- 3page 2page 1page 0page 一行 -------------------------- 0 80 160 240 320 这就是所附程序的readpcxline过程中变量的作用--把解码 的图像数据按putimge缓冲区的格式存放。 最后,我们要再现原图像的色彩,还要按图像文件中的彩色表重设调色板 。这是由于很多图像均未采用缺省调色板。 16色PCX文件的文件头中第17个字节起48个字节内容为其所采用 的彩色表,它是合成一种颜色的红绿蓝百分比,一种颜色由三个字节的值合成 ,16种颜色共48个字节。我们要把这些值对应合成16个颜色值,然后赋 给显示卡的16个调色板寄存器,这样就可以使图像恢复原有的色彩。 下面是一个用TURBO PASCAC6.0编写的解码16色PCX 图像文件的程序。 (计算机世界报 1994年 第8期) |
周报全文频道联系方式:010-68130909 |
||||||
| 【关于我们】 【广告服务】 【周报发行】 【投稿指南】 【投稿声明】 【联系方式】 【法律声明】 【媒体手册】 【编读往来】 |
||||||
| Copyright© ccw.com.cn,All rights reserved | ||||||
| 中国计算机世界出版服务公司版权所有 | ||||||