GDI與GDI+的區別

轉載至:http://www.cnblogs.com/lidabo/p/3701252.html

GDI+是GDI的下一個版本,它進行了很好的改進,並且易用性更好。GDI的一個好處就是你不必知道任何關於數據怎樣在設備上渲染的細節,GDI+更好的實現了這個優點,也就是說,GDI是一箇中低層API,你還可能要知道設備,而GDI+是一個高層的API,你不必知道設備。例如你如果要設置某個控件的前景和背景色,只需設置BackColor和ForeColor屬性。 


編程模式的變化 
“GDI uses a stateful model, whereas GDI+ uses a stateless”——GDI是有狀態的,GDI+是無無狀態的。

1、不再使用設備環境或句柄 
  在使用GDI繪圖時,必須要指定一個設備環境(DC),用來將某個窗口或設備與設備環境類的句柄指針關聯起來,所有的繪圖操作都與該句柄有關。而GDI+不再使用這個設備環境或句柄,取而代之是使用Graphics對象。與設備環境相類似,Graphics對象也是將屏幕的某一個窗口與之相關聯,幷包含繪圖操作所需要的相關屬性。但是,只有這個Graphics對象與設備環境句柄還存在着聯繫,其餘的如Pen、Brush、Image和Font等對象均不再使用設備環境。 

2、Pen、Brush,Font,Image等對象是圖形對象獨立的
  畫筆對象能與用於提供繪製方法的圖形對象分開創建於維護,Graphics繪圖方法直接將Pen對象作爲自己的參數,從而避免了在GDI使用SelectObject進行繁瑣的切換,類似的還有Brush、Path、Image和Font等。 

3、“當前位置”
  GDI繪圖操作(如畫線)中總存在一個被稱爲"當前位置"的特殊位置。每次畫線都是以此當前位置爲起始點,畫線操作結束之後,直線的結束點位置又成爲了當前位置。設置當前位置的理由是爲了提高畫線操作的效率,因爲在一些場合下,總是一條直線連着另一條直線,首尾相接。有了當前位置的自動更新,就可避免每次畫線時都要給出兩點的座標。儘管有其必要性,但是單獨繪製一條直線的場合總是比較多的,因此GDI+取消這個"當前位置"以避免當無法確定"當前位置"時所造成的繪圖的差錯,取而代之的是直接在DrawLine中指定直線起止點的座標。    

4、繪製和填充
  GDI總是讓形狀輪廓繪製和填充使用同一個繪圖函數,例如Rectangle。輪廓繪製需要一個畫筆,而填充一個區域需要一個畫刷。也就是說,不管我們是否需要填充所繪製的形狀,我們都需要指定一個畫刷,否則GDI採用默認的畫刷進行填充。這種方式確實給我們帶來了許多不便,現在GDI+將形狀輪廓繪製和填充操作分開而採用不同的方法,例如DrawRectangle和FillRectangle分別用來繪製和填充一個矩形。    

5、區域的操作
  GDI提供了許多區域創建函數,如:CreateRectRgn、CreateEllpticRgn、CreateRoundRectRgn、CreatePolygonRgn和CreatePolyPolygonRgn等。誠然,這些函數給我們帶來了許多方便。但在GDI+中,由於爲了便於將區域引入矩陣變換操作,GDI+簡化一般區域創建的方法,而將更復雜的區域創建交由Path接管。由於Path對象是與設備環境分離開來的,因而可以直接在Region構造函數中加以指定。

====================================================================
GDI+和GDI區別以及一些新特徵 

【GDI+與GDI】

1. GDI是硬件加速的,而GDI+不是的,而且GDI+2.0比GDI+更快。

2. GDI是有狀態的,而GDI+是無狀態的。

3. GDI繪圖要使用設備環境和句柄;而GDI+全部交由Graphics類管理。

4. GDI繪圖時可以使用SelectObject頻繁切換圖形對象,而GDI+的圖形對象是獨立的。

5. GDI中存在一個“當前位置”(全局區),目的是提高繪圖性能;而GDI+取消了它,以避免繪圖時不確定這個“當前位置”而帶來非預期的錯誤。

6. GDI總是將畫筆和畫刷綁定在一起,即使不需要填充一個區域也必須指定一個畫刷;而GDI+則可以使用不同的函數分開使用畫筆和畫刷。


【GDI+新特性】

1. 改進了顏色管理。GDI+不僅提供了更多可供選擇使用的顏色,使其支持Alpha通道合成運算,而且還保持了與其他顏色的兼容性。

2. 繪圖支持反鋸齒。通過設置GDI+對象的相關屬性,GDI+可以與相關的顯示驅動程序搭配完成圖形繪製時的反鋸齒功能,使得繪製的圖形更加平滑,美觀,而整個過程是由GDI+對象自動計算完成的。

3. 提供漸變畫刷。GDI+拓展了GDI的功能,提供線性漸變和路徑漸變畫刷來填充圖形、路徑和區域,甚至也可用來繪製直線、曲線等。

4. 獨立的路徑對象。GDI+使用Graphics對象來進行繪圖操作,並將路徑操作從Graphics對象分離出來,提供一個Graphics類供用戶使用,用戶不必擔心對象會受到Graphics對象操作的影響,從而可以使用同一個操作對象進行多次的路徑繪製操作。

5. 樣條曲線。GDI+封裝了繪製基數樣條曲線和貝塞爾樣條曲線的方法。

6. 變形和矩陣運算。GDI+提供了功能強大的Matrix類來實現矩陣的旋轉,錯切、平移、比例等變換操作,以便產生複雜的新圖形。

7. 多圖片格式的支持。GDI+該進了圖形處理能力,通過GDI+,用戶能夠訪問多種格式的圖片文件,轉換文件格式等,還能進行圖像重新着色、色彩修正、消除走樣等圖像處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章