WPF優點之比較GDI,GDI

2021-09-30 03:32:31 字數 1694 閱讀 2107

在.net相關領域的開發中,使用者介面主要由windows forms或者web forms實現。雖然windows forms已經出現了很多年,也提供了快速、高效的功能。但是,windows forms開發的ui介面相對比較單調,而且經過.net framework封裝後的開發庫在自定義和各種底層功能上缺少真正的支援。wpf與win32、winformsgdi是當今window桌面應用程式的主流圖形庫,gdi圖形系統已經形成了很多年。它提供了2d圖形和文字功能,以及受限的影象處理功能。雖然在一些圖形卡上支援部分gdi的加速,但是與當今主流的direct3d加速相比還是很弱小。gdi+開始出現是在2023年,它引入了2d圖形的反走樣,浮點數座標,漸變以及單個象素的alpha支援,還支援多種影象格式。但是,gdi+沒有任何的加速功能(全部是用軟體實現)。

熟悉windows xp和windows forms技術的朋友可能都知道,在windows forms中也支援一種高階的合成,支援半透明的表單,但是,在windows forms中的半透明等技術是偽裝實現。比如,顯式半透明視窗時,父視窗的背景是通過子視窗實現的。

在wpf中,引入一種新的圖形合成引擎。可以提供更高豐富的圖形顯式合成,而且不會有任何的視窗閃爍問題。這種新的顯式提交引擎與傳統的win32、windows forms相比主要有兩個優點:

1、所有的每個視窗元素都可以任意的交替重疊。

2、所有的合成操作都是direct3d中的離屏表面(off-screen su***ce)中實現的。

在這種新的方式中,元素的背景變得不再是必須的。比如,我們希望在視窗中顯式乙個文字字串,通常,在win32或者windows forms中顯式的效果如同乙個靜態文字標籤一樣:它具有系統預設的控制項背景色。而在wpf中,文字字串會直接畫到目標位置,而不管目標區域的背景顏色。

在windows vista中,gdi和gdi+仍然支援,但是基本上沒有任何功能性的改進。對gdi和gdi+的改進主要集中在安全性和客戶相關問題上。在windows vista中,gdi、gdi+和wpf並行存在,wpf的所有提交都不依賴於gdi和gdi+,而是direct3d。並且所有的primitive都是通過direct3d的本地介面實現的。wpf系統中milcore元件,它以非託管**的形式封裝了與direct3d互動的所有功能。由於wpf的大部分**都是以託管**的形式存在的,所以wpf中有很多託管、非託管的互動。當然,在一些圖形卡不支援wpf所需要的功能時,wpf也提供了稍微低效的軟體實現來支援在某些pc上執行wpf應用程式。

在wpf的實現中,每個畫圖物件都對應於乙個離屏表面。顯式視窗時不是直接地在螢幕顯式區域進行的,而是利用顯式卡提供的額外的離屏表面記憶體中。當畫圖操作在離屏表面中完成了之後,合成提交引擎再把每個需要顯式離屏表面合成為乙個單獨的可顯式表面。這種顯式方式不再需要我們用傳統的雙緩衝繪圖來避免視窗閃爍,這項功能已經有wpf預設實現了。

同時,離屏表面的使用也可以更加方便的利用顯式卡gpu(圖形處理單元,graphics processing unit)來實現放索、旋轉、變換等等。這也就意味著這些普通的3d功能也能很方便的在wpf中實現了。

關於離屏表面需要注意一點:不要錯誤的理解為wpf一定需要使用現代的圖形顯式卡(具有豐富功能的3d顯式卡)。的確,在將來實現真正的3d使用者介面是可能的。但是,wpf做了很大的努力來充分的利用gpu,把3d的元素抽象、封裝後,讓人們用類似2d的程式設計來實現3d的功能。

當前版本的wpf中,對一些win32功能還沒有很好的支援,比如wmf/emf檔案,單個象素寬度的線條等等。對於這些需求還需要使用gdi/gdi+來實現。

Linux shell 之比較判斷

整數比較 eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 小於 需要雙括號 如 a b 小於等於 需要雙括號 如 a b ...

C 語法之比較

本次將以如下順次介紹c 中的比較 1.型別比較 2.值比較 2.1.運算子過載 2.2.icomparable和icomparer介面的實現 2.3.型別轉換 1.型別比較 有2種方式進行型別比較 gettype 和 is ctypetst l typeclass new ctypetst 型別比較...

Python和PHP之比較

偶爾做個簡單的web服務測試程式,我還是喜歡採用php。簡潔,風格和c c 接近,上手快,而且庫也很齊全。以前為廣東移動做移動行業終端的演示程式時,採用國內乙個兄弟寫的fleaphp開源框架,兩周不到的時間,我從乙個對php一無所知的水平,快速的搞定了30多個頁面的後台,後來演示效果也不錯,也很穩定...