共用方式為


Direct2D 和高 DPI

撰寫 DPI 感知應用程式是讓使用者介面 (UI) 在各種高 DPI 顯示器設定上看起來一致良好的關鍵。 非 DPI 感知但正在高 DPI 顯示器設定上執行的應用程式可能會受到許多視覺成品的影響,包括 UI 元素的縮放比例不正確、裁剪的文字和模糊影像。 藉由在應用程式中新增 DPI 感知的支援,您可以讓應用程式的 UI 呈現更可預測,使其更具視覺吸引力,並讓使用者更容易閱讀。 幸運的是,Direct2D 可讓您更輕鬆地撰寫在高 DPI 中運作良好的應用程式。 本主題包含下列各節。

Direct2D 中的高 DPI 支援

Direct2D 提供下列功能來處理高 DPI 案例:

  • 只要應用程式資訊清單指出應用程式正確處理 DPI,它就會在建立視窗轉譯目標時自動接受系統 DPI。 (如需如何宣告應用程式為 DPI 感知的資訊,請參閱 如何確保應用程式在高 DPI 顯示器上正確顯示。)
  • 它會以 DIP (裝置獨立圖元) 來表示座標,讓應用程式能夠在 DPI 設定變更時自動調整。
  • 它可讓點陣圖具有 DPI,並藉由將 DPI 納入考慮來正確調整。 此功能也可以用來維護不同解析度的圖示。
  • 它會以 DIP 表示大部分的資源,這可讓資源自動與解析無關。
  • 它會使用浮點座標空間和反鋸齒,因此任何內容都可以調整為任何任意 DPI。

Direct2D 圖形管線的設計目的是要從 96 DPI 調整為 1200DPI。

Windows 8和高 DPI

從Windows 8開始,高 DPI 支援還有其他功能。

如果裝置內容 DPI 夠高,Direct2D 會變更其用來啟用文字垂直反鋸齒的閾值。 這會導致高 DPI 顯示器上的文字轉譯更快速。 此外,您可以使用 ID2D1DeviceCoNtext::SetUnitMode 方法,將單位模式切換為圖元,而不是使用 DIP。 如果您將單元模式設定為圖元,並將裝置內容 DPI 設定為螢幕 DPI,則仍會啟用優化。

什麼是 DIP?

裝置獨立圖元 (DIP) 是邏輯圖元,可透過純量 DPI 對應至實體裝置的圖元。 DPI 代表每英吋的點,其中點代表實體裝置圖元。 (名詞來自列印,其中點是列印程式可以產生) 的最小筆跡點。 因為標準監視器用來有每英吋 96 點,所以 96 的 DPI 表示裝置獨立圖元 (或 DIP) 以實體圖元對應 1:1。 例如,如果 DPI 為 96*2 = 192,則單一 DIP 會包含兩個實體圖元。

應用程式不一定正確處理此調整的原因有很多;其中一個最簡單的原因是在轉譯時需要額外的工作來探索和使用這個純量值。 在 Direct2D 中,預設會套用調整。 由於此對應,實體裝置圖元最後可能會以小數 DIP 座標結尾,這是 Direct2D 使用浮點座標空間的原因之一。

實體圖元 = (dip × DPI) / 96

若要將實體圖元轉換成 DIP,請使用下列公式:

dip = (實體圖元 × 96) / DPI

注意

從 Windows 8 開始,您可以使用ID2D1DeviceCoNtext::SetUnitMode方法,將單位模式切換為圖元,而不是使用 DIP。

 

如何確保應用程式在高 DPI 顯示器上正確顯示