# 图形文件的格式

[ 主页 ] [上一层]

近年来，个人计算机和工作站上的图形工具比几年前的巨型机上的图形工具还要多，计算机图形学的领域也随之扩展。过去，当人们编出越来越多的图形应用程序后，需要把图像文件存储下来以作日后的处理或显示之用。在缺乏广为接受的标准的情况下， 每个应用程序开发者都提出文件格式以支持其应用程序。从八十年代初以后，官方的边准组织开始提出首批通用的图形子程序和图形文件，以促成文件代码在不同的应用程序和硬件上的可移植性。
随之而来的结果试图性格是数量的急剧膨胀，在数以百计的应用程序中所使用的格式由几十种之多。例如在著名的图形处理软件——PhotoShop 5．0中用到的图像文件格式、子格式就共有三十多种。
简单举几种格式来说：PCX、MacPaint、Tiff、Gif、GEM、IFF/ILBM、Targa、BMP/DIB、WPG、PostScript、Sun、PBM、XBM、JPEG、FITS、DXF、HP-GL、LotusPic、PCL、WMF、EPS、CGM、RIB、FLI/FLC、MPEG、PDF……。对于如此繁杂的文件格式，我们每不可能接触或掌握全部的格式。在本章中，我们对最常用的文件格式进行分类归档，对读者作以详细的介绍。下面让我们先来看一下最常见的文件格式——BMP文件。
1．优点 在Microsoft Windows下得到广泛使用，支持稀疏的位元映射。
2．缺点 除了Microsoft Windows外，无法在其他环境下使用。
3．变体 Windows 3．0还可以从OS／2 Presentation Manager l．x中读取BMP文件。
4．综述 BMP格式又称为DIB，也就是Microsoft Windows设备无关位元映射（Microsoft Device Independent Bitmap）文件，Bmp可以包含每个象点l位元、4位元、8位元或24位元的图形。其中1、4和8位元图形有彩色映像，而24位元图形则是全彩（TrueColor）。
一、文件头
所有的DIB文件含有一个共同的文件头。
bfOffBits字段含有从文件头的最后（字节14）到图像数据位开始之间的字节数，这样就能方便地跳过位图头。
文件位图格式的两种变体可以通过查看位图头的第一个字（文件偏移字节14）来区分如果该字为12，则是一个os／2 格式文件，如果为40，则是Windows 3．x格式文件。
二、Windows的位图头
文件图后面为位图头和可选的彩色图像。位图头的结构有时称作BITMAPINFO，而带有色彩对应表的则为BITMAPINFOHEADER。
三、色彩对应表
使用每个像素1、4或8位的图像必然有一个色彩对应表。彩色映像的大小一般为2、16或256个表项，但如果图像不需要一个色彩全集，则表项可以更少些。如果biClrUsed字段为非零，则它包含使用的色彩数目，同时它也是色彩对应表的表项数目。如果字段为0，则色彩对应表为全部大小。24位图像没有色彩对应表，这种图像是直接RGB色彩。biClrUsed字段可以是非零，以提供一个建议的色彩大小。
由于显示设备可能不具备图像所需的那么多色彩，因此色彩对应表中的表项应该让最重要的色彩排列在先。 biClrImportant字段如果不为零，则指出了对于重新生成好的图像而言，有多少种颜色是重要的。
色彩对应表每个表项都有四个字节。
四、Windows的位图数据
位图数据紧跟在色彩对应表的后面。数据可以是不压缩的，如果要压缩，则4位和8位的图像可以使用一种RLE压缩方法。
位从逻辑角度看是每次存入一行（没有压缩时从物理角度看也是如此），每行被填充到一个四字节边界。每个像素一位的位图
每个像素只有一位，每字节有8个像素。字节中的最高位对应于最左边的像素。每个像素四位的位图，没有压缩的图像是每个字节有两个像素，高四位为最左边的像素，且每行填充到一个四字节边界。
压缩过的图像使用一种RLE编码格式，由一系列组组成。有三种类型的组：重复组、文字组和特殊组。
重复组由两个字节组成。第一个字节是像素计数值，第两个字节是一对象素，该组用第一个字节表示像素数，第两个字节为2个像素。例如，十六进制字节：05 24表示像素2 4 2 4 2
文字由一个零字节、一个像素值字节和文字像素字节组成。像素计数值必须至少为3（只有一个或两个像素时可以用重复组编码）。文字像素用0填充到一个偶数值。
例如，十六进制字节：
0005 1234 5000（注意填充到偶数字节）
表示像素 1 2 3 4 5
特殊序列00 00表示一行的结束，特殊序列00 01表示位图的结束，特殊序列00 02 xx yy是一个位置增量，说明把图像向右走xx个像素和向下走yy个像素。每个像素8位的位图
没有压缩的图像为一个字节一个像素，每行填充到四字节边界。压缩过的图像使用RLE编码格式，后者由一系列的组组成。组有三种类型：重复组、文字组和特殊组。重复组由两个字节组成，第一个字节为像素计数值，第两个字节为像素值。例如，十六进制字节：05 24表示像素 24 24 24 24 24。文字组由一个零字节、一个像素计数值字节和文字像素字节组成。像素计数值必须至少是3。文字像素用0填充到偶数字节数。
例如，十六进制字节：
0005 1234 5678 9A00（注意填充到偶数字节）表示像素 12 34 56 78 9A特殊序列与四位的位图一样。每个像素二十四位的位图。每个像素为3个字节，顺序依次为红、绿和蓝的值。每行用0填充到四字节的边界。
以上我们介绍了bmp文件的格式,下面我们看一下如何用C++语言来实现bmp文件的读取,下面是例程bmpread中的DisplayBitmap函数:
BOOL CMainWindow::DisplayBitmap(HDC hDC, HBITMAP hBitmap,
int X, int Y, DWORD RopCode)
{kk1}
// Create compatible display context
HDC hCompatDC = CreateCompatibleDC(hDC);
// Select bitmap into compatible display context
HBITMAP hOldBitmap = SelectBitmap(hCompatDC, hBitmap);
// Get dimensions of bitmap
BITMAP BM;
GetObject(hBitmap, sizeof(BM), &BM);
// Blast those bits to the screen
BOOL result;
result = BitBlt(hDC, X, Y, BM.bmWidth, BM.bmHeight,
hCompatDC, 0, 0, RopCode);
// De-select the bitmap
SelectBitmap(hCompatDC, hOldBitmap);
// Clean up after we are done
DeleteDC(hCompatDC);
return result;
}
1、优点 提供足够的信息并很好地组织这些信息，使得许多不同的输出设备能够方便地交换图形，由于CompuServe网络的广泛流行，许多平台都支持GIF。CompuServe通过免费发行格式说明书来推广自己。GIF支持24位元彩色，由一个最多有256种颜色的调色板实现，图形大小最多是64K×64K个象点。GIF的特点，包括LZW压缩、多图形的定序、交错屏幕绘图以及文字重叠。
2、缺点 现行的GIF版本不能多于256个24位元彩色，它没有为储存灰度或彩色校正数据作准备，也不能储存CMYK或HSI格式的数据。
3、变体 GIF没有各种明显不同的模式（不像TIF或PCX那样）。尽管如此， GIF仍可以有许多的变化，一些变体和选择包括:
·多图形
·每个象点的元数
·“逻辑”屏幕（围绕所有后续图形的一个图形平面）大小（用象点计算）
·逻辑屏幕的横宽尺寸比
·逻辑屏幕中图形的大小和位置
·重叠文字的存在、大小和位置
·图形序列—延时、使用者提示、交错的传输或者前一个图形的恢复。
在早期GIF规范和当前规范之间存在一些变体（有两个GIF规范版本，一个在1987年，为“87a”，还有一个在1989年，为“89a”），新设计的应该使用最新版本，这里介绍的是最新版本。
4、综述 它主要是为数据序列设计的一种传输格式，而不是作为文件的储存格式，换句话说，它具有顺序的组织形式（像TIF那样的储存格式，更普遍地使用随机组织形式，而不是顺序组织形）。这种顺序性质对图形没有什么实际影响，除了多个图形的顺序传输和显示这种专门的和特殊的情况。
了理解GIF，请记住它主要是为数据流而设计的一种传输格式，而不是作为文件的存储格式。换句话说，它具有顺序的组织形式（像TIFF那样的存储格式，则更普遍地使用随机组织形式，而不是顺序组织形式）。
GIF有五个主要部分以固定顺序出现，所有部分均由一个或多个块（block）组成。每个块由第一个字节中的标识码或特征码标识。这些部分的颀序为：头块、逻辑屏幕描述块、可选的“全局”色彩表块（调色板）、各图像数据块（或专用的块）以及尾块（结束码）。
下面是这些部分的内容：
（1）头是一个块，它识别数据流为GIF，并指示恰当地解释后面的数据所需的最早版本的GIF解码程序（87a或89a）。
（2）逻辑程序描述块定义了包围所有后面图像的一个图像平面的大小、纵横尺寸比以及色彩深度（它类似于产生图像的监视器屏幕）。它还指明后面跟随的是否为“全局”色彩表。
（3）全局色彩表（如果存在）构成一个24位RGB元组的调色板（每种底色为一个字节）。如果后面的像没有其自己的“局部”调色板，那么全局色表就是缺省调色板。
（4）后续数据作为“图形”或“专用”块出现。图形块典型地包含一个或多个位图图像，也可能是覆盖的文本。专用块或者包含一个专用应用程序码，或者包含一句不可打印的注释。
（5）最后的尾块只是值为3B（十六进制）的一个字节，表示数据流已结束。
注意：文件中的GIF数据流可能根本就不包含任何位图数据，这时，它只是要传输全局色彩表，作为没有自己调色板的后续数据流的缺省调色板。
这里是一个显示Gif文件的C语言程序,下面的代码是例程gifshow中的主函数部分:
main(argc,argv)
int argc;
char *argv[];
{kk1}
int i;
if (argc<=1) {kk1}
Sound();
graphinit();
ShowPIC( (char far *)bufptr, Width, Depth);
if (argc>=3) strcpy(filename, argv[2]);
else {kk1}
strcpy(filename+2, argv[1]);
strncpy(filename, "X_", 2);
if ((strchr(filename,'.')-filename)>8) strcpy(filename+8, ".GIF");
}
for (i=0; i<(1<<BitsPerPixel)*3; i++) pgh->palette[i] <<= 2;
packgif(filename, Width, Depth, BitsPerPixel, pgh->palette, bufptr);
Sound();
free(buffer);
SetVGAMode(0x03);
exit(0);
return 1;
}
1．优点 PCX是最老的，因此也是个人电脑软件中得到最为广泛使用的位元映射格式之一。当前的版本可使用24位元彩色，现实最多256色的调色扳或者全24位元的RGB，图形大小最多达64K×64K象点。数据是以运行长度编码（Run-Length Encoding）压缩。
2．缺点 文件格式没有为储存灰度或彩色校正表留有余地，即不能储存CMYK （代表青色Cyaneous、紫红Magenta和黄色Yellow三种基本色，加上黑色black作对比）格式数据，也不能储存HSI格式数据[虽然有些Zsoft程序允许使用HSI （代表色调Hue、饱和度Saturetion和亮度Intensity）来调整彩色值］。它的运行长度压缩方法效率不高，尤其是对于扫描图形或视频信息图形。由于PCX的发展年代较老， PCX文件可以使用各种调色板技术，但其结果是大多数阅读程序不能处理所有可能的PCX格式图形。
3．变体 PCX随着Zsoft产品的新版本而升级，在文件头（Header）中的一个序码确定了该文件所能使用的Zsoft产品的版本。其中版本0为基本单色（2色）或4色图形；版本2在版本0的基础上加上了16色图形，版本5又加上了24位调色板的256色和全24位RGB彩色。
一、概述
PCX格式由三个部分组成，即文件头、位图数据（较新版本的）和一个可达256种色彩的调色板。
其文件由固定128字节的文件头开始。它除了版本号以外，还包括被打印或扫描图像的分辨率（单位为每英寸点数）、大小（单位为像素数）、每扫描行字节数、每像素位数和彩色平面数。文件还可能包括一个调色板以及表明该调色板是灰度还是彩色的一个代码。
文件的核心部分是位图数据。位图数据以类似于Packbits 压缩法的运行长度压缩形式记录，像素值通常是单字节的指针，指向调色板中的位置。
如果版本号为5，则文件末尾处还有一个单一的位平面，一个RGB值的256色调色板三种底色各一个字节）。
二、详解
PCX 格式用于写是相对较简单的，但用于读就比较棘手，除非知道被解码图像的很多细节内容（如位深度和调色板等）。因此，以下的阐述都是基于最坏的情况，即读取一个其特性和年代都未确定的PCX文件，所有的数均是little－endian（Intel）格式，即LSB在先。
字节0，Zsoft标志
总是十进制值160，即十六进制A0。
字节1，版本号，
一定程度上不可靠的文件内容指南，见前面一节“变体”的讨论。
字节2，编码
到目前为止，总是为1。当前编码（压缩）方法只有一种，即在下面“位图数据），一节中讲述的运行长度法。
字节3，每像素位数
实际上是每个位平面的每像素位数，可能的值是1、2、4或8。
字节4-11，图像大小
图像大小由最小的和最大的极限给出。通常的下限是0。所有的极限均用16位无符号整数表示，单位为像素。图像大小可以这样计算：XSIZE＝Xmax―Xmin＋l； YSIZE＝Ymax－Ymin＋l，单位为像素。
字节12-15，以每英寸点数为单位的水平和垂直分辨率
这两个16位的数字有点古怪，它们对于定义所存储图像不起任何作用，但是，当它们与图像大小组合起来加以考虑时，能产生出被扫描图像的原始大小，或者被打印图像的希望大小，以英寸为单位。
字节16-63，头调色板
这一字段看上去只适用于带有单一位平面、16种或更少的颜色以及版本号为2的文件（参见下面“解释数据的关键”口节）。使用时，调色板拥有16组三元组的单字节调色板值。
字节65，色彩平面
PCX图像可以是单色彩，也可以是多个色彩平面的（参见第一章）。头的这个字节给出色彩平面数，它是正确翻译PCX文件的关键。
字节66，每行字节数
实际是每个平面的每行的字节数—存储末压缩图像一个扫描行的一个色彩平面所需要内存字节数，它总是偶数。
字节68，头调色板翻译
1=彩色／单色；2=灰度。Paintbrush IV或Paintbrush IV PIus中不使用它。
字节70~73，视屏屏幕大小，X和Y
只被Paintbrush IV和Paintbrush IV PIus使用；并不是必不可少的，但是对于产生正确的外观比例（防止压缩型失真）可能有用。
三、位图数据
如果没有使用调色板，那么数据是实际的像素值；否则，它们是指向调色板值的指针。在后一种情况下，数据给出的是相对于所使用的调色板的起始处的偏移（比如在三字节的三元组值中，1=字节3）。
当数据是实际的像素值时，它们按色彩平面和扫描行存储。例如，对于三种颜色红、绿和蓝（RGB)，数据格式为：
（第0行：）RRRRRR．．．GGGGGG．．．BBBBBB．．．
（第1行：）RRRRRR．．．GGGGGG．．．BBBBBB．．．
如果有两个平面，那么色彩是任选的；如果有三个平面，则颜色为RGB；如果使用四个平面，则它们是符合IBM CGA／EGA标准的单个位的平面：红、绿、蓝和光强（RGBI）。光强位只是给像素以一种名义上较高的亮度。
当数据是指向某调色板指针时，它们就组成一个完整的图像平面（也就是说，它们不会分解成单独色彩平面）。然后数据按如下方式简单地编排（字符P代表各种指针值）：
（行0：）PPPPPP
（行1：）PPPPPPP
P的长度取决于深度，以每平面的每像素位数表示。例如，如果深度为4位，则P就是半个字节长。
所有情况下，在扫描行之间都有编码隔断标志。但是，在一个扫描行中的色彩平面间没有编码隔断标志。同样，也没有分隔符可用来标识扫描行的结束（虽然一个扫描行可能是也可能不是用额外的零作为结束）。也就是说，在扫描行之间不会有行号（虽然这里写出来了），也不会有空字符、空格、回车、换行或其他的字符。
不论要记录的是何种类型的位图数据，都使用同样的运行长度压缩方法，下面给出恢复算法（当前普遍使用的基于调色板的图像只有一个平面）。
这里,请您先学习教程,具体了解PCX文件格式,然后来看一下下面这个——例程中由Gif文件转换PCX文件的程序中是如何编写PCX文件头:
WritePcxHeader(FILE *fp,char *palette )
{kk1}
PCXHEAD h;
memset((char *)&h,0,sizeof(PCXHEAD));
h.manufacturer = 0x0a;
h.version = 5;
h.encoding = 1;
h.xmin = h.ymin = 0;
h.xmax = width - 1;
h.ymax = depth - 1;
h.hres = h.vres = 0;
h.palette_type = 1;
if( BitsPerPixel < 5 ) {kk1}
h.bits_per_pixel = 1;
h.colour_planes = BitsPerPixel;
h.bytes_per_line = pixels2bytes(width);
memcpy(h.palette,palette,(1<<BitsPerPixel)*3);
}
else if (BitsPerPixel == 8) {kk1}
h.bits_per_pixel = 8;
h.colour_planes = 1;
h.bytes_per_line = width;
}
else {kk1}
h.bits_per_pixel = 8;
h.colour_planes = 1;
h.bytes_per_line = width;
}
fwrite( (char *)&h,1,sizeof(PCXHEAD),fp );
}
1、优点 TIF格式的优点主要是适合于广泛的应用程序，它与电脑结构、操作系统和图形处理的硬件无关，它可以处理黑白和灰度图形，允许使用者针对一个扫描器、监视器和打印机的特殊佳能而进行调整。TIF具有防止错误发生的格式，因此，对于媒体之间的数据交换， TIF常常是位元映射的最佳选择之一。
2、缺点 TIF有一个主要的缺点，就是需要花费大量的程序设计工作来进行图形翻译，例如， TIF数据可以用几种不同的方法压缩。为了达到覆盖面更广，一个TIF读取程序必须具有支持这些不同压缩方法的功能。
3、变体 TIF有许多的变体，所以要使数据交换可行，程序设计师要努力使得TIF读取程序可以翻译TIF的各种特性。TlF文件、读取程序和写入程序是根据不问的光度（彩色或灰度）和数据压缩方法而变化的。TIF 5．0定义了四个测光度的TIF级别： TIF-B为色， TIF-G为灰度， TIF-P为基于调色板的彩色，而TIF-K为RGB彩色。
在这些级别中，象点数据可以用六种压缩格式的任何一种储存，压缩格式通常由一个编号区别，如下所示：
＃1 无压缩
＃2 CCITTGroup 3，改进的霍夫曼运行长度编码（MOdifed Huffman Run Length Encoding）
＃3 传真机相容使用的CCITT Group 3
＃4 传真机相容使用的CCITT Group 4
＃5 LZW （Lempel-Ziv&Welch）压缩
＃32773 PackBits （Macintosh）
1988年8月发行的TIF5．0版本，又增加一些新格式：
＃32766 2位元的NeXT RLE(Run Length Encoding)
＃32771 类型2的字符对齐版本
＃32809 4位元的Thunderscan增量和RLE
＃32900 Pixar"picio" RLE
＃3290l Silicon Graphics RLE
TIF 6．0版产生于1992年春天，提供了JPEG压缩和其他新功能。
4、综述 TIF是一种国际上非常流行的适于各种电脑和操作系统的图形文件格式，目前国际上流行的很多软件都支持TIF格式。一般扫描器所配备的软件都直接或间接地用到TIF图形文件格式，还有一些软件系统，例如： Windows系统下的PhotoStyler都把TIF作为图形的存取格式， TIF格式也可以转换为Windows的BMP等其它格式。
TIFF格式有三级体系，从高到低依次为：文件头，一个或多个称为IFD的包含桥记指针的目录以及数据。体系的最高层是文件头，只包含三个表项：
（1）一个代码，指明字节顺序（低字节在先还是高字节在先）。
（2）一个把文件标识为TIFF文件的代码号。
（3）一个指向图像文件目录（Image FileDirectory，IFD）的指针。
这里是一个tif文件的文件头:
4D 4D 2A 00 00 00 00 08
IFD提供一系列的指针（索引），这些指针告诉我们各种有关的数据字段在文件中的开始位置，并给出每个字母的数据类型（例如，1字节整型）及长度。这种方法允许数据字段定位在文件的任何地方，可以是差不多任意长度，并可以包含大量信息。例如，一个指针可能指向关于彩色调色板数据的一个786字节字段；另一个可能指向扫描仪的一条64字节灰度修正曲线。在一个文件中可能有几个相关的图像，这时可以有几种IFD。IFD的最后一个表项指向任何一个后续的IFD。
每个指针都有一个标记值指明所指向的数据字段类型的一个代码号。TIFF 规范列出了所有正式的、非专用的标记号，给予它们有用的名字（如SamplesPerPixel，十进制代码为277），并描述这个指针所识别的数据，告知数据的组织方法。
1．优点 一种有竞争力的位元映射格式，为以后扩充说明留有余地。
2．缺点 有许多衍生格式，但井非所有的衍生格式都得到所有应用程序支持。
3．变体 最早的1984年1．0版格式和1989年2．0版格式，应用程序设计师可以注册自己私有的衍生格式。
4．综述 TGA格式由AT&T首先引用，用于支持他们的Targa 和Truevision 公司的 ATVISTA 图形捕捉卡。此格式已经成为数字化图形以及由光跟踪和其它应用程序所产生的高质量图形常用格式。TrueVision公司的TGA文件格式已广泛地被国际上的图形工业所接受。有许多图形工作人员喜欢按个人习惯储存图形文件，并且只存数据，不存格式，使得大量的图形文件成为个人的专用产品，无法交流，因此，有必要按照标准格式来储存图形文件， TGA文件格式就是目前国际上比较流行的图形文件储存格式。
Targa文件以一个固定大小的文件头开始，然后是可变长度的图像标识符（ID）、色彩对应表和图像。 ID字段的偏移为18，紧跟在文件头的后面。
多字节值的存储是低字节（tss）为先，即Intel格式。除了字节对齐之外，值和段均没有填充或对齐。
图像可以彩色映射的。有两种类型的色彩对应表图像：“伪彩色”（pseudo color），这种图像中每个像素值从色彩对应表中选取一个单独值，“直接彩色”（direct color），这种图像中每个像素包含分别查询的红、绿和蓝值。像素为实际的红、绿和蓝值的图像称为“真色彩图”（True Color），为灰度值的称为“黑白图”（black-and-white）。
图像总是按行存储，但行可以按从上到下或从下到上的顺序，而且对像素可队从左到右或从右到左存储，在实际图像中，像素几乎总是从左到右存储。有些型号的扫描仪从上到下扫描，而另外一些扫描仪则从下到上扫描，所以至今还没有占统治地位的行顺序。

1．优点 与设备无关，文件可以很好地组织结构；由于使用向量描述图形的性能，文件可以比相应的位元映射小很多。
2．缺点 语意结构与Windows图形模型关系太密切；文件比较复杂。
3．变体 Windows 3．x将Windows 2．x转换文件格式中加入了新的记录类型，但不使用新类型的转换文件应该与早期版本相容。
4．综述 转换文件（Metafile）是一种图形描述语言，在Metafile中，一个数据记录所在的位置没有什么关系，当要处理图形时，还要利用编译程序将Metafile转换成可见的图形， Windows的Wetafile储存Microsoft Windows图形功能呼叫的一个显示表（Display Lisi），在Metafile中允许包含Windows功能的一个子集合，这个子集合是包含大多数绘图呼叫的一个大子集合。虽然Metafile最初只是为了用作一种图形巨集指令（Macro-instrction），现在它常用作在Windows应用程序之间进行图形交换的格式。
1．优点 由于Autodesk 的Autodesk 在个人电脑上广为流行，所以DXF交换格式得到其它CAD程序的广泛支持，甚至得到其它电脑平台的支持。该标准的公布于世，对于非CAD应用程序存取工程绘图有很大的价值。它具有向量格式所具有的全部优点，再加上作为3D向量格式的优点，因此可以处理真正3D形状，包括线框和立体图形。
2．缺点 图形可用彩色序码给值，使图形与一个256色的表相关联。但彩色表不必与RGB 或其它彩色模组的彩色光谱相关联，读取DXF 的ASCII 格式（过去和现在都很常用的格式）速度太慢，DXF应用程序至少应能处理二维图形计算和文字处埋（如：注释、尺寸标准）。一个完全执行的DXF读取程序必须可以进行字型的生成和演变，以及直线和曲线的产生以及3D形状的2D表达，换句话说。它必须是一个CAD程序。
3．变体 DXF格式有两重格式： ASCII和二进制，由AutoCAD的第10版产生的二进制格式使用二进制编码的序码和数据，而不是ASCII数字，产生的文件比ASCII形成的文件大约要小25％，而且读取速度要快5倍。 AutoCAD有一个用于写DXF文件的选择，其它的CAD程序常常也有这个选择，它将DXF数据限制在实体（形状）中。这样的文件更加紧凑并且能满足图形交换的目的，不过，跟任何一种语言一佯，术语出现的上下文关系才是重要的：序码有许多不同的意义，要根据当时被交流的信息类型而定。例如，序码“10”在描述一个圆时与描述直线时的意义不同。
了解图形文件的基本信息和储存格式，有助于对图形数据的应用、处理（如压缩转换文件格式等），“使各种形式的图形数据能因自由转换而适应不同媒体的表现，这对掌握图形技术而言，虽是最基本的，但却也是非常重要的课程！
DXF与其说是一种图像格式，还不如说是一种语言或一个图形文件，也就是说，文件中数据的确切位置和顺序并不是特别重要。不过踉一种语言一样，术语出现的上下文是很重要的；代码表示许多不同的意义，要根据当时所交流的信息类型，例如代码“10”在描述圆时与描述直线时的意义就不同。
DXF文件由称作“组”的数据对组成。每一组有一个组代码，后面是一个称为组值的数字或字符串：
Group： GROUP CODE
GROUP VALUE
组代码是一个ASCII整数（二进制DXF中则为二进制数），表明后面跟的值的类型。组代码的特定范围为特定类型的数据而保留。例如，范围为0~9的组码表示后回跟的是一个ASCII字符串；特定的码表明该字符串用于什么目的。组代码和数值之间用一个回车／换行符对分开。DXF文件中的数据按照下列方法组织：
HEADER段
包含的信息大多情况下对于非CAD应用程序来说没有任何价值，许多信息是与文本和尺寸标准有关的。有时可将它忽略。
TABLES段
定义某些通用常量，如绘图“层”（layer）、观察角度和距离、坐标系以及尺寸风格。像HEADER段一样，这个段有时也可以忽略。
BLOCKS段
按名字定义实体组，同时它也可以包含实体。现在它还没有得到广泛使用，但由于它允许绘图的模块化，所以变得越来越流行。
ENTITIES段
使用点、线、圆、弧等来定义实际的二维或三维几何体（实体），还包括把实体与层和／或块连接的数据。
由于种种原因，可以跳过HEADER段和TABLES段。交换几何体造型（称为实体）的主要段是ENTITIES段；不过BLOCKS段也可以含有实体。HEADER、TABLES和BLOCKS 段即使为空也常常给出，这是因为应用程序希望有这几个段。在使用时，段就按上面给出的顺序出现。
JPEG（Joint Photographic Experts Group）格式是由ISO和CCITT两大标准组织共同推出的，定义了摄影图像通用的压缩编码方法。是数字化图像的主要存储格式。它是一种压缩位图格式，是目前为止用于摄影图像的最好压缩方法。这种格式的缺点主要是：软件压缩和还原速度慢，格式的标准仍在发展变化，而且由于标准中有可选项，所以存在不兼容的现象。
一般的说，数字化仪产生每个象素24位，红蓝绿各八位。一种典型的压缩格式（如GIF）有256个表项的一张色彩对应表，因此，在所产生的图像种的每一个象素是8位而不是原来的24位，所产生的图像使用256种颜色而不是原来的一千六百万种。而JPEG格式不同，它主要储存颜色变化的信息，特别是高度的变化，因为眼睛对这些变化非常敏感。所以，由JPEG格式存储的图像重建后在亮度上仍然有类似的变化，所以，人眼感觉与原图非常相似。
由JPEG压缩方法而节省的空间是相当大的。例如，一幅727×525的全彩色图像，其原始的每个象素24位格式占用1145KB，它的GIF版本文件为240K，非常高质量的JPEG版本文件是155K，而标准的JPEG版本文件则为58K。
MacPaint图形文件最初并非在PC上执行，而是来自Apple Macintosh，只是在最近，随着具有强大图形功能的MACII的出现， MacPaint图形文件才作为唯一连续使用的“位映射式图像文件格式”在许多方面大放异彩，因为实际上所有涉及图形的MacPaint系统应用程序都接受这种通用文件格式。
当然，在PC方面，情况有所不同。
MacPaint文件的引人之处在于它们的数量是如此之多，无数令人感兴趣的图像均以MacPaint格式存在于公用区域（public domain）中，并且完全没有版权保护。我们可以从bulletin boards中索取这些图像文件，拥有一种即时可得的艺术收集品。
在很大程度上，MacPaint文件格式比其他文件格式缺少灵活性。它的一对象只有黑白两色。如果将一整页MacPaint数据以75点／英寸的分辨率打印出来，则只有一页大小，如果在相当昂贵的激光打印机上以最高分辨率300点／英寸打印出来，也只能得到一幅2×2．5－平方英寸大小的MacPaint图像。
与所有其他通用的图像文件格式不同， MacPaint图像尺寸固定，不论一幅图像的内容是什么，其大小总是576像点（宽）×720像点（长）。
MacPaint格式有许多令人感兴趣的部分，其中可转换成PC格式的版本更是引人如胜。例如，当我们将一幅图像传到Macintosh上的MacPaint应用程序中时，绘图（paint）程序就会显示出38种图样（patterns）及图像本身。如果我们编辑与一幅特定图像相联的图样，则这些图样保留在被编辑状态。一个MacPaint图像文件中包含图像
MacPaint格式的这种特性很独特，想建立一些程序，一般很少用到它。然而，如果您有意设计一个应用这一特性的程序，那些在每个MacPaint图像文件中，就会有38种图样定义。后面有几个程序将会使我们看到这些图样。
在一台Macintosh计算机上，所有文件均以两个chunks的方式来贮存，这些Chunks称为“forks”。它们是数据“fork”及资源“fork”，分别容纳图像信息和程序码。一个MacPaint文件完全由数据“fork”组成，资源“fork”是空的。
当一个MacPaint文件要移植到其他计算机系统（比如一台PC）时，它是作为单个文件被发送的，这个文件包括两个“fork”的内容和一个MacBinary表头（header，表头记录该文件是如何被分割的，以便在将其返回给Macintosh系统时，可重新产生两个“fork”。MacBinary表头中还记录着所移植文件的类型－比方说，是一个MacPaint文件，而不是一个MacWrite文件。Macintosh文件名称可由1到31个Characters组成。
严格他说， MacBinary表头不是文件格式的一部分，实际上，在Macintosh系统的各类文件中，并末将该表头作为一种数据结构。不过，在这里将其视作文件的一部分，主要因为人们在PC上见到的绝大多数MacPaint文件的开始处都有这种表头。
在MacPaint文件中，实际的图像数据位于MacBinary表头及图样数据之后，以及其简单的格式经过压缩。这就是我们首先要研究这种图像文件格式的原因所在。图像数据占据文件的剩余部分。
在一个程序开始分析图像文件之前，首先必须做好一些内部准备工作。举例来说，程序必须弄清文件的实际意义是什么，避免将一个电视游戏的目标程序码作为图像数据来显示。就可支援多种不同规格图像的图像格式而言，还必须确定出某一具体文件的实际大小。所有MacPaint图像大小都一样，所以还原它们的软件不必担心这方面的内部工作。
MacBinary表头中有两个长整数，分别用来定义Macintosh文件类型及文件的创建者（files creator），Mac中有一套独特的系统专用于维护这种数据。每个文件“类型”指定一个4byte程序码（code），这4个bytes既可作为4个byte来处理，也可作为一个长整数来处理，主要根据当时用哪一种方式最方便。每个生成文件的程序还有一个4byte的署名，称为“创建者（creator）”域（field）。MacPaint文件的文件类型是PNTs，如果文件最初是由MacPaint建立，则其“创建者”域为MPNT。然而，由于有多个不同的Macintosh应用程序能够产生MacPaint格 式文件，所以我们不能假定“创建者”域就是MPNT。
类型域（Type field）位于MactBinary表头的第0041H到0044H byte之中。这样，如果从这一位置开始的4个byte是PNIG；就可认为这是个MacPaint图像文件，并对其（比如前述的动物图像文件）进行解码。
移植到PC上的Macintosh文件原始名称保存在MacBinary表头的第2至6个byte中，表头中的第一个byte始终是零。文件名称以Pascal语言风格贮存，即字符串中的第一个byte表示该字符串剩余部分的长度。字符甲没有必要以零作为结束标志。
最后，从第132个bytes开始，一直到文件出现，即超过MacBinary表头4个byte，都是图样数据，每个图样为8个bytes长。
做为一种通用的单色图形格式， MacPaint文件的主要缺点很容易列举。它固定的图像尺寸是一个明显的问题，因为大幅图形（特别是那些来自扫描器的）是通用的，并且是人们有兴趣研究的。再者，如果我们把MacBinary表头和它的绘画图样包括在内，那么这种文件格式就要携带一个超大的文件表头。
因此，仅仅有少数几种PC应用程序确实想要接收MacPaint文件。如果有人硬要的话，也有某些PC应用程序会这样做，但是这并非它们的优先选择。
GEM／IMG图像文件是这些应用程序最先的选择之一，它在许多方面鉴于MacPaint文件的优点一有效的图像压缩法，一种易于解码的格式，等等一可以说，它没有什么不足之处。除此之外，IMG格式适用于任何尺寸的图像，其表头是本书讨论的所有文件表头中最小的一个，只有16 byte。
尽管IMG文件具有这些特性，但它们在桌面排版领域之外并不十分流行。如果对PC来说有一种通用的图像文件格式，那么它或许就是PC Paintbrush PCX格式，我们将在下一节详细讨论这种格式。通常IMG格式与Digital Reesearch的有关应用程序以及Ventura Publisher排版软件相联系，这两种软件一个应用了GEM视窗环境，一个应用在改进的GEM排版下。
若要设计一个基于Ventura Publisher软件的图像处理应用程序，就必然会涉及到IMG文件。Ventura以一种独特的方式处理它的图像文件。在桌上排版文件数据中，尽管它声称自己完全可以应付IMG，MacPaint，TIFF以及PCX图像文件，但实际上它只适于处理IMG文件。当请求读入其他三种文件时，每输人一个文件，它都将其转变为IMG格式。这就意味着如果想用Ventura系统处理一个PCX文件，那么需在磁盘上建立两个文件，一个是PCX文件本身，另一个是与它等价的IMG文件，这是一个明显的缺点。当然，最好在Ventura系统中使用其熟悉的文件（比如IMG），这样，即可节省硬件空间又可节省转变时间。
PDF(Portable Document Format)是为了使文档能够在多种平台上阅读而设计的，它是平台无关的，包含了字体、图表、图像和打印控制数据；PDF文件使用了工业标准的压缩算法，通常比PostScript文件小，易于传输与存储；它还是页独立的，可以单独处理各页，特别适合多处理器系统的工作。
PDF文件有三种类型：图像型（位图格式）、标志型（包含电子文本、可标度、索引、搜索、拷贝）和混合型（包含原始图像及识别后的隐藏文本，能保持文档的原状、并可进行文档搜索）
正是由于PDF文件的种种优点，它逐渐成为出版业中的新宠。大家喜欢电子图书，多采用PDF文件格式；而在文档的国际化交流方面，它也已成为Internet上为大家所接受的最好方式。Adobe 公司提供的免费的PDF文件阅读器Acrobat Reader就是很好的阅览器。
在介绍PostScript 文件格式时已述及，PDF文件可以从PS 文件转换而来，那么，这里我们介绍一下其他的生成方式。
上已述及PDF文件有三种类型：图像型、标志型和混合型，其生成方法不尽相同。如利用Acrobat 3．0中的Acrobat Scan可直接借助扫描仪生成图像型PDF文件，而Adobe Capture可在Acrobat Scan的基础上生成标准型和混合型两种PDF文件，而且它是生成混合型PDF文件的唯一途径，但二者处理的对象均是已出版或打印的文档。
对于多数一般用户而言，是希望在接将电子文档转换为PDF文件，那么利用Acrobat 3．0中的Acrobat PDF Writer驱动程序是最易尝试的方法。实际上，安装Acrobat 3．0时，如果选装了该组件，安装完毕，你会发现自己的计算机上多了一个名为“Acrobat PDF Writer”的打印机。启动任何一个支持打印的文档编辑器，选用Acrobat PDF Writer“打印”你的文档（当然别忘了输入文件名及其他一些信息），你就可以得到你那篇文裆的PDF文件了。
如果你已经安装了Word（对Excel也一样）， PDF Writer在安装过程中会为Word加载一个宏文件。安装PDF Writer后你可看到Word中新增的工具条，在Word的“文件”菜单下，你也会发现一个新选项：“Creat Adobe PDF”。
另外，如果你发现用PDF Writer生成的文件质量不好，那么建议你先生成PS文件，然后用Acrobat Distiller转换为PDF文件，质量是会有所改善的。如果你手中有Acrobat 3．0这也是生成PDF文件的一个好方法，当然，那些影响打印质量的参数，就需要你自己在PostScript打印机属性里去尝试了。
下面我们再来介绍一下如何从PDF文件中提取纯文本。
随着电子书刊的流行和PDF文件运用场合的增多，不少人在阅读PDF文件之余，还希望能把文字内容“剪裁”下来，进行一些纯文本的处理工作，比如编辑或引用等。这就遇到了PDF文件的“文本化”问题。
不论是Acrobat Reader还是Acrobat 3．0软件包，都没有提供将PDF文件转换为文本文件的功能。我们一般能够作到的，是利用Acrobat Reader提供的文本选取功能（在工具栏上可以找到一种selects the text selection tool），将所需要的文本内容COPY下来。这种功能适用于处埋有限的文本，复制较大篇辐的内容则比较麻烦。同时，PDF文件在制作生成的时候，是可以对阅读者的访问权限进行限制的，比如，可以禁止打印，也可以禁止使用文本选取功能。
Windows以其直观、友好的图形用户界面和多任务多窗口的操作环境，吸引了越来越多的计算机用户和生产厂家，目前Windows已成为PC机窗口环境的标准。Windows对多媒体的支持是从对Windows 3．0增加多媒体扩展部分开始的，随后于1992年4月推出支持多媒体的Windows 3．1。Windows 3．1主要支持多媒体中的音频和静态图象，同时也增加了动画功能。
对于视频图象，Windows本身没有提供处理功能，但是Windows 3．1的多媒体控制接口MCI（Multimedia Control Interface）使Windows具有设备独立性，从而允许多媒体硬件生产厂家用DDK开发Windows下的驱动程序，将多媒体硬件加到Windows中，从而实现视频功能。MCI是一个介于Windows与硬件设备间的协议层，通过它Windows就使应用程序可与任何有多媒体扩展驱动程序的设备相配合。DVI系统就是MCI在Windows下的使用。1993年1月，Microsoft公司与Intel公司、IBM公司等合作，结合Microsoft的AVI（Audio Video Interleaved）标准与Intel的Indeo Video技术，发布了Video for Windows，使得任何PC机都能在无特定硬件支持的条件下播放视频画面。Video for Windows是基于AVI的一组应用程序。
Microsoft公司的AVI格式是一个RIFF文件说明，它用于获取、编辑以及演示音频／视频序列。一般说来，AVI文件包含了不同类型的数据流。许多AVI序列将用到音频和视频流。一个简单的略经变化的AVI序列可能用到视频数据而不需要音频数据，特殊的AVI序列也许还包括一个控制路径（control track）或者MIDI路径作为附加的数据流。控制路径能控制外部设备诸如一个MCI视频显示器。MIDI路径能够为结果提供背景音乐。一个特殊的序列需要一个特别的控制程序，这个特殊的控制程序不仅能够利用它的功能来阅读和演示AVI序列，而且能阅读和演示特殊文件中的AVI序列，这些应用忽略特殊文件中的非AVI数据。这里介绍的AVI文件是只包括视频和音频数据的文件。内容主要包括以下部分：
·AVI文件必需块
·AVI文件任选块
·写AVI文件的子程序的方法
·在Windows中播放AVI文件的代码
Microsoft制定的AVI标准格式是一种软件辅助的数字化视频压缩技术，使用它能快速地从一个数字存储设备中解压缩图象。此标准与CD－ROM的流通速率（150KB／S）相一致。AVI文件的存储格式采取了Audio和Video交错存储的方式，这种交错的存储保证了视频画面与音频同步。
AVI文件用的是AVI RIFF形式，AVI RIFF形式由字串“AVI”标识。所有的AVI文件都包括两个必须的LIST块。这些块定义了流和数据流的格式。AVI文件可能还包括一个索引块。这个任选的块给出了文件中这些数据块的地址。一个具有上述内容的AVI文件具有以下形式：
RIFF ( 'AVI'
LIST ('hdrl'
}
LIST (' movi '
)
[' idxl' <AVI Index>]
}
其中LIST块的索引块都是RIFF'AVI' 块的子块，'AVI' 块标识了此文件是一个AVIRIFF文件。LIST块“hdrl”定义了数据的格式，它是必须出现的LIST块中的第一块。 LIST块' movi' 包含了AVI序列的数据，是必须出现的LIST块中的第二块。'idxl' 是任选的索引块。AVI文件中这三项内容必须按适当的次序排列。
RIFF ( ' AVI '
LIST (' hdrl '
' avih' (<Main AVI Header> )
LIST ( ' Strl '
' strh' ( <Stream header> )
' strf' (<Stream format> )
' strd' (additional header data)
)
)
LIST (' movi '
{kk1}SubChunk | LIST('rec'
SubChunk1
SubChunk2
)
}
)
['idxl'<AVIIndex>]
)
LIST块' hdrl' 以及' movi' 运用的是子块形式。从以下例子可以看出扩充后的AVIRIFF形式包含有完整的LIST块' hdrl' 和' movi' 。

返回到上面