GDI+介紹


GDI+介紹

作者 不詳

1.引言
  GDI+是Windows XP中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的繼承者,出於兼容性考慮,Windows XP仍然支持以前版本的GDI,但是在開發新應用程序的時候,開發人員爲了滿足圖形輸出需要應該使用GDI+,因爲GDI+對以前的Windows版本中GDI進行了優化,並添加了許多新的功能。
  作爲圖形設備接口的GDI+使得應用程序開發人員在輸出屏幕和打印機信息的時候無需考慮具體顯示設備的細節,他們只需調用GDI+庫輸出的類的一些方法即可完成圖形操作,真正的繪圖工作由這些方法交給特定的設備驅動程序來完成,GDI+使得圖形硬件和應用程序相互隔離.從而使開發人員編寫設備無關的應用程序變得非常容易。

2.GDI+新增功能
  (1)漸變的畫刷(Gradient Brushes)
  GDI+允許用戶創建一個沿路徑或直線漸變的畫刷,來填充外形(shapes),路徑(paths),區域(regions),漸變畫刷同樣也可以畫直線、曲線、路徑,當你用一個線形畫刷填充一個外形(shapes)時,顏色就能夠沿外形逐漸變化。

image001.gifimage002.gif


  (2)基數樣條函數(Cardinal Splines)
  GDI+支持基數樣條函數,而GDI不支持。基數樣條是一組單個曲線按照一定的順序連接而成的一條較大麴線。樣條由一系列點指定,並通過每一個指定的點。由於基數樣條平滑地穿過組中的每一個點(不出現尖角),因而它比用直線連接創建的路徑更精確。下面是分別使用兩種方法創建的圖形,一個使用基數樣條,一個使用直線。

image003.gif

  (3)持久路徑對象(Persistent Path Objects)
在GDI中,路徑屬於設備描述表(DC),畫完後路徑就會被破壞。在GDI+中,繪圖工作由Graphics對象來完成,你可以創建幾個與Graphics分開的路徑對象,繪圖操作時路徑對象不被破環,這樣你就可以多次使用同一個路徑對象畫路徑了。
  (4)變形和矩陣對象(Transformations & Matrix Object)
GDI+提供了矩陣對象,一個非常強大的工具,使得編寫圖形的旋轉、平移、縮放代碼變得非常容易。一個矩陣對象總是和一個圖形變換對相聯繫起來,比方說,路徑對象(PATH)有一個Transform方法,它的一個參數能夠接受矩陣對象的地址,每次路徑繪製時,它能夠根據變換矩陣繪製。下面的圖形是一個圖形變換前後的例子,變換按照先縮放後旋轉完成。

image004.gif

  (5)可伸縮區域(Scalable Regions)
  GDI+ 在區域(regions)方面對GDI進行了改進,在GDI中,Regions存儲在設備座標中,對Regions 唯一可進行圖形變換的操作就是對區域進行平移。而GDI+用世界座標存儲區域(Regions),允許對區域進行任何圖形變換(譬如如圖所示的縮放),圖形變換以變換矩陣存儲,下面例子是一個區域變換前後的例子(縮放、旋轉、平移)

image005.gif

  (6)Alpha Blending(混合)
  你可能會注意到上面顯示的圖形,紅色未平移區域與變換後區域有一部分交叉區域,這一部分形成的夢幻效果就是由GDI+支持的Alpha Blending(混合)實現的,利用alpha融合,你可以指定填充顏色的透明度,透明顏色與背景色相互融合,填充色越透明,背景色顯示越清晰,下圖所示的四個橢圓被填充了同樣的顏色,但由於擁有不同的透明度而呈現不同的顯示效果。

image006.gif

  (7)多種圖像格式支持.
  圖像在圖形界面程序中佔有舉足輕重的地位,GDI+除了支持BMP等GDI支持的圖形格式外,還支持JPEG(Joint Photographic Experts Group)、GIF(Graphics Interchange Format)、PNG(Exchangeable Image File)、TIFF(Tag Image File Format)等圖像格式,你可以直接在程序中使用這些圖片文件,而無需考慮它們所用壓縮算法。
  (8)其它。
  GDI+還將支持其它技術,譬如重新着色、顏色校正、元數據、圖形容器,也許這些功能我們會在將來的WindowsXP或者Microsoft VisualStudio。Net中看到.


3.編程模式的改變 Device Contexts(設備描述表), Handles(句柄), 和 Graphics Objects(圖形對象)
  如果你曾經使用過GDI編寫過應用程序,你肯定對設備描述表(DC)的概念非常熟悉,設備描述表是Windows使用的一個數據結構,用於存儲具體設備能力和與如何在設備上重繪一些項目的有關屬性信息。而且視頻設備的設備描述表還與特定的窗口有關。首先你必須獲得一個設備描述表句柄,然後在圖形繪製時,你把這個句柄作爲一個參數傳遞給GDI圖形繪製函數。當然你也可以把它傳遞給獲得或設置設備描述表有關屬性的函數。
  利用GDI+函數,你不必使用句柄或者設備描述表。相反,你可以簡單地創建一個圖形對象(Graphics),然後以你熟悉的面向對象的編程方式調用它的方法即可,譬如myGraphicsObject.DrawLine(parameters)。Graphics對象是GDI+的核心,正如設備描述表是GDI的核心一樣,設備描述表(DC)和圖形對象(Graphics)在不同的環境下扮演着同樣的角色,發揮着類似的作用,但是兩者也存在着這質的不同。前者使用基於句柄的編程方法而後者使用面向對象的編程方法。
  圖形對象和設備對象一樣,與屏幕的顯示窗口有關,它包含着與項目重繪有關的屬性信息(譬如平滑度),然而圖形對象並沒有像GDI那樣與Pen(畫筆)、Path(路徑)、Image(圖像)、Font(字體)等攪在一起。在GDI中,所有與繪圖有關的繪圖對象必須選入指定設備描述表中(使用 SelectObject函數),才能被指定的設備描述表所使用。而在GDI+中,你只需把這些繪圖對象作爲一個參數傳遞給圖形對象Graphics方法調用即可,每一個圖形對象所使用的繪圖工具至於它調用方法使用的參數有關,它可以通過參數使用多種Pen和Brush繪圖,而不是與特定的筆和畫刷聯繫在一起。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章