WPF概述(硬體加速及解析度無關性)

橘子香氣發表於2019-01-07

一、名詞解釋

 

WPF(Windows Presentation Foundation),直譯為Windows表示基礎,是專門用來編寫程式表示層的技術和工具。

 

大部分程式都是多層架構的,一般至少包含三層:

資料層:用於儲存資料,多由資料庫構成。

業務邏輯層:用於編寫現實的業務邏輯。

表示層:負責把資料和流程以介面顯示的形式展示給使用者看。

相比其他技術,WPF引入了“內建硬體加速”和“解析度無關”等創新功能。

 

二、硬體加速

 

WPF通過DirectX執行所有WPF繪圖操作,以便充分利用現代顯示卡的最新功能。

 

在WPF問世之前,傳統的Windows應用程式都依靠如下兩部分來建立使用者介面:

User32:該部分為許多元素(如視窗、按鈕和文字框等)提供了熟悉的Windows外觀

GDI/GDI+:該部分為渲染簡單形狀、文字以及影像提供了繪圖支援,但增加了複雜程度(而且通常效能較差)。

 

後針對User32和GDI/GDI+的限制發行了 DirectX 技術,起初用於開發遊戲,注重速度,由顯示卡支援,可以實現複雜的紋理對映、特殊效果(如半透明)以及三點陣圖形所需的硬體加速功能。

WPF應用程式在底層都是使用DirectX,因此具有兩大優勢:①可使用豐富的效果②顯示卡硬體加速

 

三、解析度無關性

 

傳統Windows應用程式的使用者介面,是不可伸縮的。如果使用更高的顯示器解析度,將會更緊湊地排列畫素,應用程式視窗將變得更小並更難以閱讀。即影像包含的畫素數不變(精細程度不變),但影像大小會變。

而在WPF中,高解析度顯示器可顯示相同大小的工具欄圖示,但使用更多畫素顯示更清晰的圖形,WPF會確保任何顯示內容都能自動地具有正確的尺寸。即影像大小不變,影像包含的畫素數會變(精細程度會變)。例如,如果在計算機顯示器上建立一個1英寸寬的按鈕,在更高解析度的顯示器上它仍能保持1英寸的寬度——WPF只是使用更多畫素更詳細地渲染這個按鈕罷了。

 

下面介紹兩種單位:

dpi(dot per inch,每英寸畫素點數)。例如,一個最大解析度為1600×1200畫素的19英寸顯示器,可用勾股定理算出其畫素密度:

[螢幕DPI] = √16002+12002畫素 / 19英寸 =100 dpi

WPF使用與裝置無關的單位進行度量,一個與裝置無關的單位被定義為1/96英寸,每個裝置無關單位對應一個物理畫素,轉換關係如下:

[物理單位尺寸] = [裝置無關單位尺寸]×[系統DPI] = 1/96英寸×100dpi = 1.04畫素

 

下面介紹兩種圖:

點陣圖,也稱為點陣影像,使用我們稱為畫素的一格一格的小點來描述影像,因此縮放或旋轉點陣圖時會出現馬賽克模糊或邊緣鋸齒狀的現象。佔用空間大。常見格式:*.bmp、*.pcx、*.gif、*.jpg、*.tif、*.png、photoshop的*.psd等。

向量圖,被定義為一系列的形狀(點、線、面等構成),能夠很容易地縮放為任何尺寸,而清晰度不變。佔用空間小。常見格式:AdobeIllustrator的*.AI、*.EPS、*.SVG,AutoCAD的*.dwg、*.dxf,Corel DRAW的*.cdr等。

WPF中,最好使用向量圖。

 

 

 

本博文性質為讀書筆記,並非純原創,所參考和引用的書籍如下,特此註明。如轉載,也請註明出處。

《WPF程式設計寶典——使用C# 2012和.NET 4.5(第四版)》,英文書名為《Pro WPF in C# 2012: Windows Presentation Foundation in .NET 4.5》。

相關文章