王朝百科
分享
 
 
 

GDI原理

王朝百科·作者佚名  2010-01-04  
宽屏版  字体: |||超大  

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,它提供了您需要的支援。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有