首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 「分辨率無關」是否名副其實?深度實測與分析

     編輯:關於.NET

宣稱與誤解

WPF 以「分辨率無關」作為賣點,採用 1/96 英吋為一個裝置無關單位(DIU)。但微軟缺乏詳細說明,導致三大常見誤解。

誤解一:改變螢幕解析度,UI 尺寸不變

實測:同一視窗(400×600 DIU)在 1280×1024 與 800×600 解析度下,實際像素尺寸明顯不同。
1280x1024 800x600

誤解二:改變系統 DPI 設定,UI 尺寸不變

實測:96 DPI vs 192 DPI 系統設定下,同一視窗物理尺寸不同。
DPI 設定 96 DPI 192 DPI

誤解三:相同 DPI 設定下,不同螢幕 UI 尺寸一致

實驗環境:

桌面 LCD筆電 LCD
物理解析度1600×12001400×1050
可視尺寸17.0×12.75 英吋12.0×9.0 英吋
實際物理 DPI94117
系統 DPI 設定9696

繪製 384 DIU(4 英吋)線段,實測長度:桌面 4.08 英吋,筆電 3.28 英吋。
實測長度

原因:WPF 透過 OS API 取得系統 DPI 設定(96),誤以為等於物理 DPI。實際像素尺寸 = 1/物理DPI × DIU數。系統設定 ≠ 物理 DPI 時,尺寸必有偏差。

真正的「分辨率無關」條件

將系統 DPI 設定調整為等於物理 DPI(桌面 94、筆電 117),線段長度均為 4 英吋。
桌面 94 DPI 筆電 117 DPI

列印輸出才是真正無關

同一 4 英吋線段,分別在 96 DPI 與 120 DPI 系統設定下列印,紙本尺寸完全一致。
120 DPI 列印 96 DPI 列印

結論

  1. WPF 列印可做到真正分辨率無關。
  2. 螢幕顯示僅在「系統 DPI 設定 = 物理 DPI」時達成分辨率無關,否則無法保證。

對開發者的啟示

  • 繪圖/列印程式務必理解 DIU、系統 DPI、物理 DPI 三者關係。
  • 若需精確物理尺寸(如 CAD、醫療影像),需在安裝/首次運行時引導使用者校準系統 DPI,或自行換算縮放比例。
  • 參考資源:Calvin P. Schrotenboer《Is WPF Really Resolution Independent?》、Charles Petzold 部落格、MSDN 論壇討論。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved