热门问题
时间线
聊天
视角
圖形設備接口
別名:圖形設備接口、圖像設備界面 来自维基百科,自由的百科全书
Remove ads
Remove ads
圖形設備接口(英語: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,因為這些技術能更好的讓程序員利用硬件的特性來加速圖形圖像的顯示。
Remove ads
簡介
在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系列遊戲主機,現已成為新一代圖形子系統的主流。
Remove ads
GDI+
GDI+從Windows XP作業系統開始引入,提供二維的向量圖形,改進舊有的GDI,加強的視覺化屬性,例如邊界,漸變和透明。通過GDI+,能夠直接將BMP轉成JPG或其它格式的圖片,還能夠生成SVG、Flash等。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)的libart和Cairo庫。
Remove ads
參考文獻
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads