圖形裝置介面(英語:Graphics Device Interface[1],縮寫 GDI)是微軟視窗系統提供的應用程式介面,也是其用來表徵圖形對象、將圖形對象傳送給諸如監視器印表機之類輸出裝置的核心組件。GDI 是視窗作業系統(Microsoft 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],或對於VGA卡直接I/O,或直接對VRAM所在的記憶體位置作填值。但VGA卡當時日新月異,各家的VGA卡在其I/O ports的定義並不一致,雖中間有推出一個名為VESA SVGA的顯示卡驅動程式的共用標準,但由於DOS時先天的64KB的分頁限制,仍有許多不便。

微軟在開發Windows時,發現這個問題,於是決定打造一個GDI子系統,將顯示裝置改以API的方式進行操作,以便將各VGA卡的差異透過各VGA卡廠商自行製作的驅動程式來銜接GDI,來打消各VGA卡在操作上的彼此差異。

但微軟很快就被其他的程式開發者告知,GDI太慢了,因此Microsoft就再出一個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

外部連結