共用方式為


Direct2D 和 High-DPI

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

Direct2D 中的 High-DPI 支援

Direct2D 提供下列功能來使用高 DPI 案例:

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

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

Windows 8 和 High-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。

 

如何確保應用程式在 High-DPI 顯示 上正確顯示