跳转到内容

GDI+

本页使用了标题或全文手工转换
维基百科,自由的百科全书
(重定向自Graphics Device Interface

图形设备接口(英語: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

外部連結

[编辑]