跳转到内容

GDI+

本页使用了标题或全文手工转换
维基百科,自由的百科全书

图形设备接口(英语:Graphics Device Interface[1],缩写 GDI)是微软 Windows 操作系统提供的应用程序接口,也是其用来表示图形对象、将图形对象传送给诸如显示器打印机之类输出设备的核心组件。GDI 是 Windows 操作系统的三大核心部件(也称“子系统”)之一[来源请求]GDI+ 在 GDI 的基础上调整了编程模型,同时加入了渐变色画刷、Alpha混合等功能。[2]

GDI用来完成一些和绘制有关的工作,像直线或曲线的绘制,文字渲染,调色板控制。它不能用来直接绘制一些界面元素,像窗口、菜单等等,这些工作由用户子系统来完成,位于user32.dll中,它是创建在GDI之上的一个软件层。其他系统也有类似GDI的东西,比如Macintosh的Quartz(传统的QuickDraw),和GTK的GDK/Xlib。

GDI最大的好处是它有可以直接访问硬件设备的能力。通过GDI可以非常容易的在不同类型的设备上绘制图形,像显示屏和打印机或类似的显示设备。这些能力是微软Windows系统“所见即所得”程序的核心。

简单的不需要快速图形渲染的游戏可能会用到GDI。但是GDI对一些高级的动画制作无能为力,它缺少显卡中帧的概念,还缺少3D图形硬件光栅化的支持等等。现代的游戏通常使用DirectX和OpenGL而不是GDI,因为这些技术能更好的让程序员利用硬件的特性来加速图形图像的显示。

简介

[编辑]

DOS时期,应用程序如果要输出画面到显示设备,必须使用INT 10[3],或对显卡直接进行I/O,或直接在显存(VRAM)相应的位置填值。但显卡当时日新月异,各厂商的显卡对其I/O端口的定义并不一致,虽然中途有推出过一个名为VESA SVGA的显卡驱动程序通用标准,但由于DOS时期先天的64KB分页限制,仍有许多不便。

微软在开发Windows时发现了这一问题,于是决定打造一个GDI子系统,将显示设备改为通过API进行操作,以便让显卡厂商自行开发驱动程序对接GDI,来打消各显卡在操作标准上的彼此差异。

但微软很快就被其他的程序开发者告知,GDI太慢了,因此又推出了WING[4]用于Windows 3.0/3.1,让应用程序能够直接对VRAM填值,以加速绘图的相关计算。

后来,WING改为DirectDraw,成为DirectX的一部分,直到DirectX 7。(DirectX 8以后,DirectX中2D与3D显示技术合并,进入全3D的贴图计算方式)

微软在推广.Net Framework时,又将GDI用.Net Framework的方式进行封装,可是由于GDI本身的限制,加上微软自己在MSDN Library的文件实用性有所欠缺(有些功能已有技术文件,但从未做出实际可用的功能),再加上GDI+在图形计算与显示方面不算快,以及先后饱受远程代码执行漏洞等问题之下,使其无法成为微软在图形子系统的主流。

到DirectX 10时,已经进入以DirectX的COM为基础,以.Net Framework方式进行封装的XNA时代。XNA身兼DirectX的性能与.Net Framework的便利性,已应用于XBOX系列游戏主机,现已成为新一代图形子系统的主流。

GDI+

[编辑]

GDI+从Windows XP操作系统开始引入,提供二维的矢量图形,改进旧有的GDI,加强的可视化属性,例如边界,渐变和透明。通过GDI+,能够直接将BMP转成JPG或其它格式的图片,还能够生成SVGFlash等。GDI+ 使用ARGB的值来表示颜色。GDI+的双缓冲技术可以提高绘图效率,可避免屏幕闪烁。

GDI+号称提供了硬件加速功能,可以直接访问硬件。但这似乎是夸饰的说法,GDI+无法直接使用VGA卡上的GPU来加速绘图的相关计算,因此在绘图性能上远远不及DirectX,只能做到Lock存储器进行操作。(GDI+只是一组重新封装GDI的API,DirectX则是从COM到底层的显卡驱动程序的组合)

随GDI+推出了加强型EMF,即EMF+,可以同时支持GDI和GDI+。Microsoft .NET透过System.Drawing命名空间提供对GDI+的支持。The GDI+ 的DLL可移植到旧有的Windows版本上。

GDI+ 类似Apple的Quartz 2D子系统,以及属于开放源码(open-source)的libartCairo库。

参考文献

[编辑]
  1. ^ Windows GDI - Microsoft Docs. [2018-07-02]. (原始内容存档于2018-07-02) (英语). The Microsoft Windows graphics device interface (GDI) 
  2. ^ What's New In GDI+? - Microsoft Docs. [2018-07-02]. (原始内容存档于2018-07-02) (英语). First, GDI+ expands on the features of GDI by providing new capabilities, such as gradient brushes and alpha blending. Second, the programming model has been revised to make graphics programming easier and more flexible. 
  3. ^ INT 10 - Video BIOS Services. [2007-12-05]. (原始内容存档于2007-10-14). 
  4. ^ How To Obtain Microsoft WinG SDK and General Overview of WinG

外部链接

[编辑]