# 图形设备和系统

[ 主页 ] [上一层]

大多数的输出设备都使用位图，而PostScript打印机（它使用向量数据和位图数据）及所有的绘图仪是例外。
点阵打印（包括激光打印机）是最常用的输出设备。其本质是位图设备，但是，如果它们提供内嵌的解释器，如PostScript或HPGL，则可把打印机当成是向量设备。大多数打印机都有它本身的数据格式或工业标准格式（如PCT）。不包含解释器的打印机一般都能提供快速输出和较低的开销。彩色打印机包括简单的彩色色带点阵打印机、彩色喷墨打印机和彩色激光打印机。高性能的打印机不仅具有自己的格式而且还需要在应用中有定制的驱动程序或者支持彩色PostScript。
绘图仪与点阵打印机类似，一般只接收符合厂家规定格式的数据。许多绘图仪已采用HPGL标准，要输出到绘图仪的应用（如CAD程序等）可以产生HPGL输出，还有一些可以阅读HPGL格式的文件。
EGA卡是通过VLSI（超大规模集成电路）实现的，它拥有丰富的、灵活的图形功能，为图形应用的开发提供了有力支撑。
（1）显示模式。
表中列出了EGA卡的图形显示模式。表中可以看出EGA最多可提供16种彩色，最大分辨率为640×350。
模式6是CGA的最高分辨率模式，它支持的屏幕分辨率水平为640个象素，垂直为200个象素，但是只有两种彩色。
模式4和5是很普通的CGA图形模式，显示的分辨率是水平320象素，垂直为200象素，彩色有4种，每个象素为2位。
模式0dh的分辨率为320×200，彩色种类为16，每个象素用4位保存。
模式0eh不是CGA或MDA的兼容模式，但它提供了更多的彩色。
模式0fh是EGA卡独有的，它的分辨率为640×350象素。
模式10h所支持的分辨率与模式0fh一样，但它提供16种彩色。
位映象图象可以是显示卡在图形模式下显示的任何图形画面。下面就以显示在屏幕上的图象为例进行讨论，在讨论时假走图象文件所保存的图象刚好可显示在显示器上。当一幅显示在EGA图形卡上的图象，在显示时是一幅彩色图象，打印后变成单色图象。
当然如果用户使用CGA图形卡来显示这幅图象，那么只能显示一部分，原因是CGA图形卡的分辨率只有640×200象素，而EGA图形卡的分辨率为640×350象素，当然，如果把这幅图象用VGA卡640×480分辨率显示，那么图象只能充满屏幕的上面部分，下面部分为空白。
由于EGA卡的分辨率为640×350象素（模式0fh），一个屏幕总共有640×350＝224，000个象素，显示器的屏幕数据保存在内存中，位于内存高区，图象数据的保存和程序或数据保存的方法类似，都是作为8位字节串。在单色图象中，每位对应于一个象素，这祥每个字节就包含8个象素，上面这幅图象所需的存储空间为224，000／8=28k字节。由于上面这种图像是用位映射到象素上的，所以也称这类图象为位映象图象（bitmapped image）。
下面介绍把EGA卡上的图象保存到文件中的方法（这种文件显然就是我们所指的图文件）。EGA卡的屏幕数据保存在段A000H中，把该段中的28K字节拷贝到文件中即可，可用下面的程序段来完成这个任务：
FILE * fp；
if ( (fp = fopen (" SCREEN． BIN" ， " wb”)) ! = NULL ) {kk1}
fwrite (MK_FP (0Xa200 ， 0) ， 1 ， 28000 ， fp ) ；
fclose ( fp ) ；
} else printf("Error in creating file" ) ；
上面这个程序片段很简单，由于只有28K字节的数据，程序执行速度也会很快，但是它的效率并不高，原因在于源图象中有大片空白，也就是说图象中有很多白色区域，没有必要把它们都放到图象文件中，当图象很大时，如果彩色再很多，那么图象文件必然要占据大量的存储区。
EGA卡是一种彩色能力及分辨率都属于中等的图形卡，在其中引人了调色板概念，使得可用的颜色总数比同时可显示的颜色数要多得多。当然彩色总数由每种颜色在调色板寄存器中的位数来决定。
VGA卡比EGA卡具有更强的彩色功能，同时显示的彩色可达256种。VGA卡与EGA卡类似，但EGA用的是数字显示接口，而VGA卡用的则是模拟显示接口。下面简单介绍VGA图形卡所
支持的显示模式。
上表是VGA图形卡所支持的图形显示模式，位于模式10h以前的模式与EGA卡的对应模式一样，这使得本来在EGA卡上运行的程序也可在VGA卡上运行。
模式11h支持的是VGA卡的最高分辨率，水平方向为640个象素，垂直方向为480个象素，但只支持2种彩色，这种模式下显存的开始地址为A000：0000。
模式12h也支持VGA卡的最高分辨率，但它具有16种彩色。对彩色图形应用程序而言，这是一种常用显示模式。
模式13h中，VGA卡提供256种颜色，这种模式是VGA卡的特有模式，分辨率为320×200象素，工作在这种模式下的VGA卡提供的颜色种类最多。
SuperVGA 产品在体系结构上和标准的VGA 卡有所不同，每一种SuperVGA卡的制造商都在其产品的体系结构上作了一些扩充，以适应新的显示模式，并且具有一些新的特点。
下面介绍SuperVGA所提供的增强型图形模式。
（1） 640×400，256色模式
这是多种适配器支持的逻辑分辨率，它要求有256KB显存。这种模式的实现方式通常和VGA的13h模式很类似，所不同的是每一扫描行的象素数和扫描行数比模式13h高一倍。
（2） 640×480，256色模式
这种模式要求VGA卡具有512K显存。
（3） 800×600，256色模式
这是用于大多数廉价的多频显示器的最高分辨率模式，它也要求相应的卡有512K显存。
（4） 1024×768，256色模式
这是目前的SuperVGA图形适配器上所见的较高分辨率。这种模式要求768K的显存。
（5） 800×600，16色模式
此种模式需240K显存，此种模式和模式12h的实现方式类似。
（6） 1024×768，16色模式
这是SuperVGA产品中共有的较高分辨率，只有稍好的显示器才支持这种分辨率。
上面介绍了多种增强的图形显示模式，每种SuperVGA产品所支持的图形显示模式不尽相同。
在EGA和VGA图形适配器中，可用两种方法表示彩色，一种是压缩象素法，另一种是彩色位平面法。在压缩象素法中，一个象素的所有彩色信息被压缩到字节中，如果字节中放不下，就要放到字中。
（a）压缩象素法
压缩象素法是在显示存储器中各个位平面各取一位，经过位运算后经显示卡显示在监视器上。
（b）彩色位平面法
在彩色位平面法中，把显示存储器分割成几个独立的存储位平面，每个位平面用于控制一种彩色成分，每一显示象素在每个位平面中占有1位位置。
根据用来复制彩色的介质的不同，彩色可以用两种基本方式中的一种进行表示：一种是增色系统，另一种是减色系统。
当彩色图画被印在纸上时，它们是用通常叫做CMY的彩色系统实现的。CMY中的C表示cyan（青蓝），M表示megenta（品红），Y则表示yellow（黄）。实际上，正确的叫法应是CMYK，K表示black（黑）。
减色合成法中的三原色是青蓝——一种适中的蓝色、品红——一种相当普遍的红颜色和纯黄色。用户也许曾在现实世界中见过这些颜色的样品。
激光打印机可用减色合成法打印彩色，它们的颜色就是用这些术语表示的。这种模型对视频显示器就不适用，因为视频显示器本身不是白的，它们是黑的，就是说在其沉寂状态它根本不发射任何光。显象管发出的任何光都被加到黑色上，这样，在计算机屏幕上生成颜色的方法和纸上所做的恰好相反，这叫做增色合成法，它的基色是红、绿、蓝。
要在计算机屏幕上显示彩色图形，必须采用某种机制使得每个象素能够决定在显象管的扫描束照亮它时需要多少百分比的红、绿和蓝光。
实现这一功能最易想到的办法是使每一个象素有三字节的相关信息，每一个字节对应一个基本增色的百分比。该方法有许多不足，其中一个典型的问题就是：一个具有EGA图形模式的屏幕大小的图象需要0．75MB以上的存储空间，该图象的磁盘文件即使是用基于复杂串的压缩技术也需要相当大的存储空间，这样的一个屏幕更新起来速度非常慢。
显然这种方法是不实用的。按这种方法构造的视频显示器可以一次同时用一千六百种不同彩色来产生图象，但是屏幕的更新速度是一必须着重考虑的因素，这个问题不解决，我们只好舍弃上述的显示器构造方法。
计算机技术发展到今天，以其不可抗拒的魅力获得了越来越广泛的应用，CAD／CAE应用程序、适用于互联网的3D应用程序、Internet广播技术、3D游戏以及能够提供卓越影音效果的DVD技术等这些3D图形密集型应用程序日渐成为计算机在各行业及家庭应用的主流，提供快速的三维图像生成速度。性能更高、视觉效果更逼真、更富娱乐性以及价格更加合理的个人电脑平台，形成当今用户迫切追求的目标。
这些主流技术的应用均以三维图像处理技术的应用作为核心。由于各专业用户及家庭用户对声、色、效的追求，使得作为图形处理核心的三维图像处理技术理所当然地成为推动未来一代可以与视窗兼容的图像处理平台发展的原动力，这一平台将为个人电脑用户提供前所未有的逼真的立休效果及卓越的运算性能。因此，要了解未来的计算机技术，就必须先了解三维图像处理的技术。
三维图像处理过程由创建三维模型及执行几何运算开始。一个完整的三维图像处理过程可分为物理运算、几何转换。剪切及光效、三角形设定和像素渲染四个阶段，其中需要进行大量的浮点运算（包括物理实体，几何转换、剪切、光效，以及三角形设定）和整数运算（包括三角形设定和像素渲染）。在图形渲染方面，图形加速卡厂商已获得了很大的进步， AGP图形加速卡的问世。更快的内存、更加适用于三维图像处理的应用接口（API）如Directx和OpenGL的出现，大大提高了处理复杂整数运算密集型过程的速度，但对于3D图像处理过程中大量浮点运算密集型过程的处理则需要由中央处理器完成。而目前的情况是，中央处理器的数据处理速度无法与图形加速卡的处理速度匹配，从而减慢了数据传输速度，因此在图像处理的前端阶段即形成了一个拖慢整体三维图像处理速度的瓶颈。如何解决这个瓶颈问题，成为目前各处理器生产厂商迫在眉睫的问题。
还是在1993年386大行其道的时候，对显示卡的要求是插上显示器能亮就成；到了1995的486时代，只要进得去WIN31，放得了VCD就足矣；这时偶尔听说过3D加速卡，也在心中不以为然他说：3D卡，那是什么东西？
1996年奔腾流行，3D游戏在市场上开始出现，但人们正对多媒体感兴趣，关注的是CPU，是好声卡，显示卡也就继续被冷落在一边，但3D卡的先头部队已经上市。
到了1997年上半年，随着几个3D游戏的发布及人们对游戏的“新认识”，加之各媒体的炒作和Virge芯片的热销，3D时代在某些人的心目中已经来临；下半年，E3大展开幕，其中最风光的莫过于3D游戏和3Dfx，一块好显卡的重要性在人们心中也提高到了前所未有的高度。此时，人们才愿意花大价钱配好显卡，而不象以前只用百把来块钱打发了事。
以后的芯片之争无疑会集中在3Dfx Voodoo2、Matrox G200、Intel i740 、 3DLabs Permedia 2、ATI RagePro Turbo和NVIDIA RIVA 128 and RIVA ZX这几款上。3Dfx Voodoo2我就不多罗唆了，大家想必已经从各种渠道知道了它的消息； Matrox G200则要讲几句：它是Matrox继Millennium II与Mystique 220之后推出的新东东，力图挽回Matrox现在的颓势；Intel i740是Intel进军3D芯片界的第一弹，也是Intel一个“大阴谋”的开始； 3DLabs Permedia 2则是3Dlabs公司继permedial后的新一代产品；ATI Rage Pro Turbo是ATI在原有的Rage Pro上的增强新一代；NVIDIARIVA 128 and RIVA ZX实际是同一种东西，多出的ZX意味着RIVA 128有了8MB的显存，可支持AGP×2模式了。每种芯片都有自己的优势，也都各有高招。比较显示芯片的具体性能从以下几个方面来做个比较：
1． 2D性能
在2D方面起主要作用的是芯片的RAMDAC与显示内存，这两项对显示的分辨率、颜色数与刷新率都有大影响。虽然说现在用户对2D性能的重视程度远不如以前，但2D性能的提升就如CPU速度的提升一样，与以前不可同日而语。现在的用户大部分时候都不必等着显示卡工作，而是显示卡等着用户来输入。所以单纯的测试软件所显示的数值已经不象以往那么能说明问题。
2． 3D性能
3D性能是检验现在显示芯片最重要的一个标准，也是本文讨论的重点。由于Vedoo系列只支持全屏3D加速，所以我们在这里说的3D性能其实是专指游戏中的3D性能
3． 3D质量
单纯地从速度上来确定一种芯片的好坏现在似乎没有说服力。现在的3D游戏不是光有速度感就玩得下去的，对画面的质量有些人似乎还看得更重要一些。
现在的36卡市场的火爆毋需多言。老一代的3D芯片由于性能同Voodoo相比差了不止几倍，早先被捧上天的S3 virge之流已经被划入了淘汰品的行列。Voodoo系列百分之七、八十的市场占有率现在是无人能出其右，但3Dfx也并不能高枕无忧。可以预见，下半年的3D市场一定会出现群雄混战的格局，好戏已经开始了。 作为消费者的我们除了坐山观虎斗之外，剩下的就是捂着钱包偷笑了。
3DNow！TM技术的出现，为扫除计算机三维图像前端处理速度的瓶颈提供了一套理想的解决方案，为当今的x86处理器架构开创了截然不同的三维运算及多媒体运算能力。该技术与当前的x86软件兼容，并且无需为操作系统提供支持，同时所有专为3DNow！TM技术而设计的应用方案均可运行所有操作系统。因此，3DNow！技术所带来的是一项根本的技术性突破。从最近Ziff－Davis实验室的3D WinBench 98基准测试中不难找到来用3DNow！ TM技术的AMD K6（r）－2处理器与Pentium II处理器的测试结果。在测试中，两者均采用相同的配置为基准，并采用微软即将推出的Directx 6．0。从测试结果来看， AMD K6（r）－2系统的三维性能显著胜出Pentium II系统，配置AMD K6（r）－2／300处理器的系统得分为1110分，而同等时钟频率的Peniium II 300系统只获得961分，即使是pentium II 400系统也仅仅得到ll20分的成绩。而采用Winstone（r）98测试的主流商用软件性能评分中，AMD K6（r）－2／ 300与Pentium II 300则不分伯仲，分获215和216分。
面对如此的高性能和相对低的价位，3DNow！ TM技术一经推出即成为业界多家软件厂商注目的焦点，其中许多著名厂商的软件作品如Epic MegaGames的Unreal、Rage的Incoming、Microsoft的Baseball 3D、Imagine Studios的Ares Rising、Viewpoint DataLals的LiveArt 98等软件均已进行优化以便适用于3DNow！ 技术，这些软件现已出现在IT市场上。其他一些公司的相应优化软件也将于年内推出。预计在1998年年内，3DNow！ TM技术掀起三维图像处理应用的狂潮已成定势。
3DNow！ TM技术是AMD公司为消除传统的图像处理过程中进行浮点运算和多媒体应用程序的瓶颈而研究开发的一套创新的指令集，是该公司旨次为业界提供的三维图像处理创新技术，它带来了全新水平的三维图形性能及逼真的图形效果，开创了与三维图形加速卡同步运算的先河。该指令集共包含21个指令，可最大程度地支持称为“单指令多数据”（SIMD）的浮点运算。针对三维图像处理的早期阶段集中的大量浮点运算指令，该技术相应备有一组全新的单精度浮点指令，它们可加速物理及几何运算，舒缓瓶颈的问题，使中央处理器能够在速度上赶上图形加速卡，加快多媒体应用程序的运算过程，大幅提高三维图像运算性能及逼真度。由于采用3DNow！TM技术的AMD K6（r) －2处理器的微架构可以支持在图像处理过程中全面执行两条指令，即每一时钟周期执行高达两个3DNow！ TM指令，同时每一指令又可执行两个单精度浮点运算，从而AMD K6（r）－2处理器在每一时钟周期内可执行四个浮点运算（包括加、减、乘）。此外，3DNow！ TM技术还包括一个特定的SIMD整数指令，有关指令集可以执行SIMD整数运算。数据预取以及更快的MMX至浮点交换等功能，方便为象素动作提供补偿，从而提高了MPEG解码能力。AMD K6（r）－2／ 333的浮点性能最高可达1．333 Gigaflops，较pentium II 333及400的浮点性能优胜很多，后两者的浮点性能分别为0．333 Giganops和0．4 Gigaflops。即使是AMD K6（r）－2／300的最高浮点性能也可达到1．2 Gigaflops，比代表目前Intel公司最高性能的Pentium II 400的浮点性能还高三倍，这正是3DNow！ TM技术带来的技术飞跃。
显示卡技术的关键是显示总线技术，到现在显示总线技术已经发展了ISA、VESA、LOCAL BUS、PCI和AGP技术4代。据统计，前三种结构的显示卡技术在97年升始走向没落，主要是用户对显示技术的要求随着3D显示技术和操作系统的技术突飞猛进的发展而提升。
在PCI技术雄霸桌面PC四年之后，INTEL推出了崭新的AGP显示技术，这种技术可以加速大多数的3D绘图、影像与2D绘图工作。AGP显示卡与AGP新式专用插槽，将PC绘图工作从繁忙的PCI总线中解放出来，搭建了一条高速直通公路。
AGP技术推出的直接受益者是3D加速能力的飞速提高，AGP可以让专门为其设计的3D游戏、软件与应用程序描绘出更加真实和快捷的效果，AGP可以解决目前从网络卡到音效卡都抢用PCI通道的拥挤状况。
AGP技术有两个核心内容：一是使用PC的系统主内存作为显示卡上显示内存的扩展延伸，这样可以大大增加显示内存的潜在容量；二是使用更高的专用总线频率66MHz、133MHz甚至266MHz，这样可以极大提高数据的传输率（AGP在66MHz时是266MB／s， PCI的33MHz只有133MB／s）。
目前流行的AGP主要有两种方式：
一是DMA方式，在这种方式下，显示卡不使用PC系统主内存做显示内存的扩展。这时显示卡只是利用高速的AGP总线来提高数据传输率。
二是DIME（Direct Memory Execute）方式，就是在显示卡上的显示内存的容量不够的时候，将系统主内存当作内存使用。将许多耗费显示内存的3D操作在系统内存内完成，这样在系统价格基本不变的前提下大大提高PC整机3D机能。未来的几个月内随着100MHz的高速SDRAM的普及和价格的回落，系统主内存的技术差距进一步缩小，这一切为DIMERR的使用创造一块良好的土壤。
个人电脑用户现在购买AGP显示卡时机已经成熟。PII技术的成熟和快速普及，AGP将可以取代PCI成为最普遍的显示绘图技术。
而利用APG技术的电脑整机并不会使新PC的售价提高多少，这样促进用户可以用有限的钱，选择市场上最好的产品组合成性能价格比最好的个人电脑。
随着INTEL 440BX这一类支持100MHz系统频率的主机板控制芯片在98年Q3的普及，使得系统总线的带宽进一步增大。100MHz系统频率的条件下AGP技术充分利用系统总线的优势可以完美发挥出来。
6月26日微软公司推出WINDOWS 98操作系统，在这种操作系统中完整支持AGP技术，使得在此操作系统的环境中显示效果AGP显示卡比PCI显示卡要好很多。许多WINDOWS 95的用户同样可以通过升级WINDOWS95的版本到OSR2．1，安装微软Directx5．0后一样可以完美体验到APG技术的好处。
针对APG增强技术设计的软件表现3D 的效果远比PCI显示卡的效果好。事实上，AGP 希望能淘汰PC 游戏里过于简单的3D 场景，执行相同的游戏是AGP 加速增强版本的某些视觉效果的改变令人印象深刻。在使用AGP 增强版本的G-police 测试的结果发现，原本PCI版本上的爆炸效果边缘出现的令人讨厌的锯齿不见了，而原本静态的广告变成绚丽的动态画面。
到现在为止，您应该已经掌握计算机图形图象处理的一些基本知识，在这里我们将以几个小的C语言程序段向您讲解一下如何用编制程序来进行图形调用和图象处理。
下面我们先来看一下这个利用ＶＧＡ图形卡页面功能的程序：
include<graphics.h>
main()
int graphdriver=DETECT,graphmode;
int i,j,k;
initgraph(&graphdriver,&graphmode,"");
cleardevice();
setactivepage(0);
rectangle(100,50,200,150);
setactivepage(1);
circle(150,750,50);
for(i=1;i<=20;i++)
{kk1}
setactivepage(0);
for(j=1;j<=30000;j++)
i=j;
setactivepage(1);
for(k=1;k<=30000;k++)
i=j;
}
getch();
closegraph();
}
接下来，我们以Turbo C语言来看一下如何实现对图形模式的控制：
Turbo C中提供了四个模式控制函数：
int far getgraphmode （void）；
返回现行图形模式的值；
void far restorecrtmode（void）；
恢复屏幕在图形初始化前的模式；
void far setgraphmode（int mode）；
设置系统图形模式并清屏幕；
void far getmoderange（int graphdriver，int far *lomode，int far *hmode）；
获得一个图形驱动程序可设置的图形模式的范围。
经过调用以上函数，可实现使显示器暂时离开图形模式
进入文本模式，进行文本输出，然后不经过initgraph再返回图形模式。
#include <graphics.h>
#include <stdio.h>
main()
{kk1}
int g_driver,g_mode,lo,hi;
g_driver=CGA;
//设置CGA的图形驱动程序
getmodararge(CGA,&lo,&hi);
//获得CGA的图形模式范围
printf("CGA supporting modes range form %d to %d.\n",lo,hi);
//显示CGA显示模式范围
initgraph(&gdriver,&lo,"c://tc");
//初始化为CGA CO模式
bar3d(100,30,130,150,0,0);
//画一实心方块
getch();
g_mode=getgraphmode();
//获得现行图形模式
restorecrtmode();
//返回图形初始化前的显示模式
printf("Now is text mode, press any key back to graphics mode.\n");
getch();
setgraphmode (gmode);
//再回到图形模式
rectangle (50,30,100,130);
//画一长方形
getch ();
//等待敲一键
closegraph();
//关闭图形系统
}
上述程序是针对CGA显示器的，根据本章第一节中所列出的各种显示器及其显示模式的表格，可以很方便地将此程序修改为适用于其它显示器模式的程序。
返回到上面