知識マップ: WPFの高DPI対応 ── 「DPIに強いはず」なのにぼやける・にじむ原因と対処
記事「WPFの高DPI対応 ── 「DPIに強いはず」なのにぼやける・にじむ原因と対処」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
WPFはレイアウト単位がDIPで既定でSystem DPI Awareのため起動時の主モニターDPIには自動で追従するが、System Awareのままだと異なるDPIのモニターへ移した際にOSのDPI仮想化が働き画面全体がにじむ。これを根治するのがPer-Monitor DPI対応で、アプリケーションマニフェストへの宣言だけでウィンドウの再スケーリングがフレームワークにより自動化される。残る改修対象は、UseLayoutRoundingで防ぐサブピクセル配置のにじみ、ベクター資産や複数解像度の切り替えで防ぐビットマップのぼやけ、そしてWriteableBitmapのようなピクセルバッファを自前で扱うコードのOnDpiChangedへの追従に絞られる。WindowsFormsHostやWebBrowserコントロールのようにHWNDを持ち込む混在コンテンツは、Per-Monitor対応の上限を決める要素として別枠で扱う必要がある。
flowchart LR
accTitle: WPFの高DPI対応の知識マップ
accDescr: WPFがDIPとSystem DPI Awareによって起動時のDPIには自動追従する一方、異なるDPIのモニター間ではOSのDPI仮想化がにじみを引き起こし、Per-Monitor DPI対応の宣言がそれを防ぐこと、UseLayoutRoundingやベクター資産がそれぞれサブピクセルのにじみとビットマップのぼやけを防ぐこと、WindowsFormsHostやWebBrowserなどHWNDを持つ混在コンテンツがPer-Monitor対応の上限になることを示す図。
wpf["WPF"]
per_monitor_dpi_awareness["Per-Monitor DPI対応"]
dip["DIP(デバイス非依存単位)"]
system_dpi_aware["System DPI Aware"]
cross_monitor_blur["モニター間移動時の全体のにじみ"]
dpi_virtualization["DPI仮想化"]
app_manifest["アプリケーションマニフェスト"]
dotnet_framework[".NET Framework"]
windowsformshost["WindowsFormsHost"]
hosted_content_scaling_limitation["ホストしたコンテンツのスケーリング制限"]
windows_forms["Windows Forms"]
hwnd["HWND(ウィンドウハンドル)"]
webview2["Microsoft Edge WebView2"]
webbrowser_control["WebBrowserコントロール"]
bitmap_blur["ビットマップ画像のぼやけ"]
vector_graphics_asset["ベクター画像資産"]
bitmap_scaling_mode["BitmapScalingMode"]
ondpichanged["OnDpiChanged(DPI変更への追従)"]
pixel_buffer_code["ピクセルバッファを自前で扱うコード"]
subpixel_rendering["サブピクセル配置"]
use_layout_rounding["UseLayoutRounding"]
snaps_to_device_pixels["SnapsToDevicePixels"]
textformattingmode_display["TextFormattingMode(Ideal/Display)"]
wpf -->|"利用する"| dip
wpf -->|"実装を担う"| system_dpi_aware
system_dpi_aware -->|"原因になり得る"| cross_monitor_blur
dpi_virtualization -->|"原因になり得る"| cross_monitor_blur
per_monitor_dpi_awareness -->|"防止する"| cross_monitor_blur
per_monitor_dpi_awareness -->|"前提とする"| app_manifest
per_monitor_dpi_awareness -.->|"前提とする"| dotnet_framework
windowsformshost -.->|"原因になり得る"| hosted_content_scaling_limitation
wpf -.->|"利用する"| windowsformshost
windowsformshost -->|"利用する"| windows_forms
windowsformshost -->|"前提とする"| hwnd
hwnd -.->|"原因になり得る"| hosted_content_scaling_limitation
webview2 -.->|"の後継"| webbrowser_control
webbrowser_control -.->|"原因になり得る"| hosted_content_scaling_limitation
dip -->|"原因になり得る"| bitmap_blur
vector_graphics_asset -->|"防止する"| bitmap_blur
bitmap_scaling_mode -->|"軽減する"| bitmap_blur
per_monitor_dpi_awareness -.->|"前提とする"| ondpichanged
pixel_buffer_code -.->|"前提とする"| ondpichanged
dip -->|"原因になり得る"| subpixel_rendering
use_layout_rounding -->|"軽減する"| subpixel_rendering
snaps_to_device_pixels -->|"軽減する"| subpixel_rendering
use_layout_rounding -->|"より先に行うべき"| snaps_to_device_pixels
textformattingmode_display -.->|"用いるのは非推奨"| per_monitor_dpi_awareness
概念間の関係(全24件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- WPFはDIP(デバイス非依存単位)を利用します。
- WPFはSystem DPI Awareの実装を担います。
- System DPI Awareはモニター間移動時の全体のにじみの原因になることがあります。
- DPI仮想化はモニター間移動時の全体のにじみの原因になることがあります。
- Per-Monitor DPI対応はモニター間移動時の全体のにじみを防ぎます。
- Per-Monitor DPI対応はアプリケーションマニフェストを前提とします。
- Per-Monitor DPI対応は.NET Frameworkを前提とします。
- WindowsFormsHostはホストしたコンテンツのスケーリング制限の原因になることがあります。
- WPFはWindowsFormsHostを利用します。
- WindowsFormsHostはWindows Formsを利用します。
- WindowsFormsHostはHWND(ウィンドウハンドル)を前提とします。
- HWND(ウィンドウハンドル)はホストしたコンテンツのスケーリング制限の原因になることがあります。
- Microsoft Edge WebView2はWebBrowserコントロールの後継に当たります。
- WebBrowserコントロールはホストしたコンテンツのスケーリング制限の原因になることがあります。
- DIP(デバイス非依存単位)はビットマップ画像のぼやけの原因になることがあります。
- ベクター画像資産はビットマップ画像のぼやけを防ぎます。
- BitmapScalingModeはビットマップ画像のぼやけを軽減します。
- Per-Monitor DPI対応はOnDpiChanged(DPI変更への追従)を前提とします。
- ピクセルバッファを自前で扱うコードはOnDpiChanged(DPI変更への追従)を前提とします。
- DIP(デバイス非依存単位)はサブピクセル配置の原因になることがあります。
- UseLayoutRoundingはサブピクセル配置を軽減します。
- SnapsToDevicePixelsはサブピクセル配置を軽減します。
- UseLayoutRoundingはSnapsToDevicePixelsより先に行うべきです。
- TextFormattingMode(Ideal/Display)をPer-Monitor DPI対応に用いることは推奨されません。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。