词条 | GDI原理 |
释义 | Windows 98和Microsoft Windows NT中的图形主要由GDI32.DLL动态连结程式库输出的函式来处理。在Windows 98中,这个GDI32.DLL实际是利用16位元GDI.EXE动态连结程式库来执行许多函式。在Windows NT中,GDI.EXE只用于16位元的程式。 这些动态连结程式库呼叫您安装的视讯显示器和任何印表机呼叫驱动程式中的常式。视讯驱动程式存取视讯显示器的硬体,印表机驱动程式将GDI命令转换为各种印表机能够理解的代码或者命令。显然,不同的视讯显示卡和印表机要求不同的装置驱动程式。 主要目的因为PC相容机种上可以连接许多种不同的视讯设备,所以,GDI的主要目的之一是支援与装置无关的图形。Windows程式应该能够毫无困难地在Windows支援的任意一种图形输出设备上执行,GDI通过将您的程式和不同输出设备的特性隔离开来的方法来达到这一目的。 设备分类图形输出设备分为两大类:位元映射设备和向量设备。大多数PC的输出设备是位元映射设备,这意味著它们以图点构成的阵列来表示图像,这类设备包括视讯显示卡、点阵印表机和雷射印表机。向量设备使用线来绘制图像,通常局限於绘图机。 许多传统的电脑图形程式设计方式都是完全以向量为主的,这意味著使用向量图形系统的程式与硬体有著一定层次的隔离。输出设备用图素表示图形,但是程式与程式介面之间并不是用图素进行沟通的。您当然可以使用Windows GDI作为一个高阶的向量绘制系统,同时也可以将它用於比较低阶的图素操作。 从这方面来看,Windows GDI和传统的图形介面语言之间的关系,就如同C和其他程式设计语言之间的关系一样。C以它在不同作业系统和环境之间的高度可携性而闻名,然而C也以允许程式写作者进行低阶系统呼叫而闻名,这些呼叫在其他高阶语言中通常是不可能的。正如C有时被认为是一种「高级组合语言」一样,您可以认为GDI是图形设备硬体之间的一种高阶介面。 您已经看到,Windows内定使用图素坐标系统。大多数传统的图形语言使用「虚拟」坐标系,其水平和垂直轴的范围在0到32,767之间。虽然有些图形语言不让您使用图素坐标,但是Windows GDI允许您使用两种坐标系统之一(甚至依据实际度量衡的坐标系)。您可以使用虚拟坐标系以便让程式独立於硬体之外,或者也可以使用设备坐标系而完全迎合硬体设备提供的环境。 某些程式写作者认为一旦开始使用操作图素的程式设计方式,就放弃了装置无关性。我们在上一章看到,这不完全是正确的,其中的诀窍是在与装置无关的方式中使用图素。这要求图形介面语言为程式提供一些方法来确定设备的硬体特征,并进行适当的调节。例如,在SYSMETS程式中,我们根据标准系统字体字元的图素大小来确定萤幕上的文字间距,这种方法允许程式针对解析度、文字大小和方向比例各不相同的显示卡进行相应的调节。您将在本章看到一些用於确定显示尺寸的其他方法。 发展简史早期,许多使用者在单色显示器上执行Windows。即使是几年前,笔记本电脑也还只有灰阶显示。为此,GDI的设计保证了您可以在编写一个程式时不必太担心色彩问题-也就是说,Windows可以将色彩转换为灰阶显示。甚至在今天,Windows 98使用的视讯显示已经具有了不同的色彩能力(16色、256色、「high-Color」以及「true-color」)。虽然,彩色喷墨印表机的成本已经很低了,但是大多数使用者仍然坚持使用黑白印表机。盲目地使用这些设备是可以的,但是您的程式也应该能决定在某种显示设备上有多少色彩可以使用,从而最佳利用硬体功能。 当然,就如同您编写C程式时,为了使它在其他电脑上执行而遇到一些微妙的移植性问题一样,您也可能不小心让装置依赖性溜进您的Windows程式,这就是不与硬体完全隔离的代价。您还应该知道Windows GDI的局限。虽然可以在显示器上到处移动图形物件,但GDI通常是一个静态的显示系统,只有有限的动画支援。如果需要为游戏编写复杂的动画,就应该研究一下Microsoft DirectX,它提供了您需要的支援。 |
随便看 |
|
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。