モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> WPF で手動で Per-monitor DPI を取り扱っている場合の注意点。

 テキストレンダリングにポイント。

TextOptions.TextFormattingMode="Display" にしない (あるいは特定の条件下のみ使用する)

 このレンダリングモードは System DPI に依存してレンダリングされるため,DPI が違うディスプレイでの表示が酷くなります。

 それに,個人的な主観になりますが,200% 環境だと "Ideal" の方が圧倒的に綺麗です……

 仮に設定するのであれば,

  1. System DPI が 150% (DPI = 144) 以下であること
  2. テキストサイズが絶対的に (スケーリング後のサイズ) 20px を超えないものであること
    • ヘッダーコンテンツなどの大きい文字には "Ideal" を使う方が好ましい。
  3. Per-monitor DPI で DPI 変更を取り扱っているときは全て "Ideal" にすること。

です。

Per-monitor DPI の処理を WPF に投げる場合

 条件は少し減りますが,

  1. System DPI が 150% (DPI = 144) 以下であること
  2. テキストサイズが絶対的に (スケーリング後のサイズ) 20px を超えないものであること
    • ヘッダーコンテンツなどの大きい文字には "Ideal" を使う方が好ましい。

です。

補足

 ここでは Display <-> Ideal の境界線を定義していますが,実際に 2 番目の項目さえクリアしてれば当然ですが 1 も満たすことになります。当たり前ですが,12px のコンテンツは 175% 環境では 21px になりますからね。つまり 2 つめの項目にすでにヒットしています。

 RGB pixel でないと ClearType がひどいことになるのは Windows あるあるなのですが,WPF で「TextOptions.TextRenderingMode="Grayscale"」のレンダリングってなんかいまいち綺麗じゃないですよね…… なんでなんですかね。