【GDI】 GDI與GDI+

GDI

Graphics Device Interface,即圖形設備接口,是Windows API的一個重要組成部分。它是Windows圖形顯示程序與實際物理設備之間的橋樑,GDI使得用戶無需關心具體設備的細節,而只需在一個虛擬的環境(即邏輯設備)中進行操作。它的橋樑作用體現在:

(1)用戶通過調用GDI函數將邏輯空間的操作轉化爲具體針對設備驅動程序的調用。

爲實現圖形設備無關性,Windows的繪圖操作在一個設備描述表上進行。用戶擁有自己的“邏輯座標”系統,它獨立於實際的物理設備,與“設備座標”相對應。開發Windows應用程序時,程序員關心的是邏輯座標,我們在邏輯座標系上繪圖,利用GDI將邏輯窗口映射到物理設備上。

(2)GDI能檢測具體設備的能力,並依據具體的設備以最優方式驅動這些設備,完成真實的顯示。

 

GDI函數大致可分類爲:

  • 設備上下文函數(如GetDC、CreateDC、DeleteDC)
  • 畫線函數(如LineTo、Polyline、Arc)
  • 填充畫圖函數(如Ellipse、FillRect、Pie)
  • 畫圖屬性函數(如SetBkColor、SetBkMode、SetTextColor)
  • 文本、字體函數(如TextOut、GetFontData)
  • 位圖函數(如SetPixel、BitBlt、StretchBlt)
  • 座標函數(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)
  • 映射函數(如SetMapMode、SetWindowExtEx、SetViewportExtEx)
  • 元文件函數(如PlayMetaFile、SetWinMetaFileBits)
  • 區域函數(如FillRgn、FrameRgn、InvertRgn)
  • 路徑函數(如BeginPath、EndPath、StrokeAndFillPath)
  • 裁剪函數(如SelectClipRgn、SelectClipPath)

GDI雖然使程序員得到了一定程度的解脫,但是其編程方式仍很麻煩。譬如,顯示一張位圖,程序員需要進行“裝入位圖 | 讀取位圖文件頭信息 | 啓用設備場景 | 調色板變換”等一連串操作。而有了GDI+,這些問題便迎刃而解了。

 

 

GDI+

GDI+是GDI的後續版本,最早於2001年隨WinXP一起推出,後來又被包裝進.NET框架的託管類庫中,成爲.NET中窗體繪圖的主要工具。

GDI+主要提供了以下三類服務:

(1)二維矢量圖形:GDI+提供了存儲圖形基元自身信息的類(或結構體)、存儲圖形基元繪製方式信息的類以及實際進行繪製的類。

(2)圖像處理:大多數圖片都難以劃定爲直線和曲線的集合,無法使用二維矢量圖形方式進行處理。因此,GDI+爲我們提供了Bitmap、Image等類。它們可用於顯示、操作和保存BMP、JPG、GIF等圖像。

(3)文字顯示:GDI+支持使用各種字體、字號和樣式來顯示文本。

GDI接口是基於函數的,而GDI+是基於C++ OO的編程接口,因此使用起來比GDI要方便。因爲GDI+實際上是GDI的封裝和擴展,所以執行效率一般要低於GDI。

發佈了112 篇原創文章 · 獲贊 44 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章