(二)設備無關像素/邏輯像素


  其實這一篇文章的內容,應該是跟上一篇一起發布的,但是由於這個更多的是與UI相關的知識,因此單獨開辟了一篇來寫。

 

  寫過Winform的人都知道Winform中對寬高的定義都是整形的,也就是說 不允許出現小數,這是為什么呢?

  答案很簡單:Winform中寬高的單位是像素(px),而像素是顯示圖像的基本單位,不可再分割,因此只能是整形。

  使用像素決定應用的寬高比,會存在什么缺陷呢?

  以像素為單位決定寬高比的情況下,當你調整顯示器分辨率時候,應用程序的大小就會發生變化。例如一個大小是1024x768的應用程序,如果把系統分辨率調成800*600會怎么樣?很明顯,這個程序會占用整個屏幕,還顯示不全。Winform的應用程序就會發生這種牛逼的問題

  

  在WPF中,引入了一個新的概念 邏輯像素(logic pixel),又叫設備無關像素(device-independent pixel)。

  我們來看下它的定義

  1 邏輯像素=1/96 英寸

  看到了么?這貨是以英寸為單位的!所以當你設置 Window的Width=96 Height=96時  你會獲取到一個1*1英寸的窗口,有興趣的可以拿尺子量一下。因此無論你如何調整分辨率,它都是1X1英寸的大小,所以你看到的窗體大小是固定的。

  邏輯像素跟像素又是怎么個關系呢?是怎么換算的呢?

  默認情況下,顯示器默認每英寸的有96個像素   也就是96DPI, 這時候 Width=96 Height=96 窗體對應的像素也是96PX*96PX

      如果手賤調整為了120DPI  表示顯示器每英寸有120個像素, 這時候Width=96 Height=96 窗體對應的像素是120PX*120PX

  

      看到了么? 邏輯像素 只認英寸,而且當顯示器調整其每英寸像素數量的時候 邏輯像素向像素的轉換也會自動增加像素比,就是這樣,這個猥瑣的單位保證了窗體的顯示大小不變。這是為什么WPF中長與寬的單位允許小數點的存在,因為這是英寸,不是最小單位像素。同理這也是為什么Win8和WP7選擇Xaml作為展示的原因!

   扯遠了……

  以上就是邏輯像素的基本概念,下面我們來看看系統提供的一些默認值,這些默認值封裝在System.Windows.WindowParameters中,其中大部分值都是以邏輯像素為單位,但是有兩個特例,WindowParameters.SmallIconHeight 與 WindowParameters.SmallIconWidth這兩個屬性是以像素為單位的,因為圖標的單位大家也都熟悉 16px X 16px  32px X 32px等

 

  Tips:

  邏輯像素雖然是以英寸為單位,但是不會100%的精確,這是由於系統原因與顯示器硬件等原因造成的,但是整體來說屏蔽了由於分辨率修改造成的窗體大小變化問題。邏輯像素這個概念會在UI展示中經常遇到,因此要牢記。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM