高DPIでの文字ぼやけ

クソだクソだと槍玉にあげられるアレ。

基礎知識編

http://ascii.jp/elem/000/000/901/901046/

http://ascii.jp/elem/000/000/905/905248/

↑あたりを全部読む。

かいつまんで言うと

  • XPまでのスケーリングでは96dpiか120dpiかだけの対応だった
  • Vistaではそれ以外にも対応するため、ビットマップベースで拡大縮小するようになった
  • 8.1からはそれに加えてマルチモニタ環境にてモニタ毎にスケーリングが自動で切り替わるようになった

という感じ。これだけ見ると順調に進歩しているように見えるんだけれど、「Win10で文字がぼやける」だのなんだの言ってる記事やスレが目立つのはそうとも言い切れないからなわけで。

問題は120dpi(125%)

ぼやけるのは要するにビットマップベースで拡大縮小しているから。ならVistaになった時点で大問題にされるはずなんだけれど、そうはならなかった。何故だろう?答えはXP仕様のスケーリングにある。

XPまでは96dpiと120dpiしかサポートしていなかった代わりに、120dpiでもビットマップベースの拡大縮小ではなかった。つまり120dpiを使う限りはレイアウト崩れを起こすこと無く、綺麗にレンダリング出来るように作られていたわけ。

ところがVistaから導入されたビットマップベースの拡大縮小では、この120dpiでの美しいレンダリングが使えない。使えないというか、ちゃんとソフト側で120dpi以外の高DPIにも対応した1ものだけ選りすぐるようにしてしまったので、XPまでにナンチャッテで120dpiに対応してたソフトはみなビットマップベースの拡大縮小が使われることになってしまった。勿体ない!

しかしこの時点で問題にならなかったのは、カスタムDPIスケーリングという形でXP仕様のスケーリングが残されていたから。そもそも120dpiよりも精細なディスプレイを使わない限り、拡大縮小がぼやけるだけというデメリットしかないわけだから、120dpiを使う場合は普通みんなXP互換のスケーリングを使うよね?そんなわけで120dpi環境の人はみなXP仕様のスケーリングに居残りということになったわけです。

あ、ちなみに144dpi(150%)だとXPが対応してない2ので、Vistaではビットマップベースの拡大縮小をせざるを得ない。つまりこのころから144dpi環境の人は状況が変わってないんだな。そのころそんな高DPIのディスプレイが普及してたかと言われれば…うーん。

マルチモニタスケーリングの登場

8まで特に変更されずに来たスケーリングだが、8.1では様相が変わる。マルチモニタでのDPIの動的変更3という、時代のニーズに合った素晴らしい機能が追加。どうしてもこの機能を使いたい人はカスタムDPIスケーリングとサヨナラせざるを得ないことになった。

しかしよくよく考えたらデスクトップのPCを使ってる場合とか、ラップトップでも外部モニタを使わない場合なんかは、DPIを変えなきゃいけないような場面がほぼ無い。だってデスクトップのマルチモニタでも普通モニタのサイズやdpiは合わせるでしょう?そんなわけで、ここでもカスタムDPIスケーリングが亡霊のように残る。だってこっちの方が120dpiでのレンダリングが圧倒的に綺麗なんだもの。仕方が無い。

そしてWin10

別に、8.1からスケーリングの方法が変わったわけではない。しかし何故だか知らんが、カスタムDPIスケーリングが設定画面から削除されてしまった。最近のMSお得意の設定ツール削除である。みんなWin10になってから騒いでいるのはたぶんコレが原因4。ついでに言うと騒いでいるのはたぶん120dpi(125%)環境の人だけ。だって先に言ったとおり、それ以外のdpiではそもそもビットマップベースの拡大縮小しか選択肢に無いわけなので…。

従来通り、120dpi環境でマルチモニタを使わない人にとっては前と状況が変わっていないわけだから、そのままXP仕様のスケーリングを使わせれば良いと思うんだけれどね。何故設定項目消したし。

んでどうすればいいのか

本当はMSがスケーリングの仕様を直すべき。システムDPIが120dpiの環境に限り、自動的にXP仕様のスケーリングを利用してレンダリングして、それベースにマルチモニタに対応したビットマップベースの拡大縮小をすれば良いわけ。たぶんやらないと思うけど。

※不完全ながらWindows側がCreators Updateから対応を行ったので以下の方法はとらなくてもいいかも5。お好みでどうぞ。

マルチモニタへの対応が不要な人は、カスタムDPIスケーリングを引き続き使うことになる。例によって設定項目は画面から消えただけで、レジストリを弄ってやれば従来通り設定が出来る。

https://technet.microsoft.com/en-us/library/dn528846.aspx

https://technet.microsoft.com/en-us/library/dn528847.aspx

この辺を参考に。特に下の記事があるあたり、MSも問題把握してるんだからさっさと対策しろと思ってしまう。そんなに難しいんだろうか?俺は判断出来ないけど。

実際には面倒なので、以下のようなcmdファイルを作って実行する。

REG ADD “HKCU\Control Panel\Desktop” /v DpiScalingVer /t REG_DWORD /d 0x00001018 /f
REG ADD “HKCU\Control Panel\Desktop” /v Win8DpiScaling /t REG_DWORD /d 0x00000001 /f
REG ADD “HKCU\Control Panel\Desktop” /v LogPixels /t REG_DWORD /d 0x00000078 /f

Win8DpiScalingってのが、XP仕様のスケーリングのフラグ。LogPixelsが既定のシステムDPI。96から120に変更(HEX表記で78)にすることで、カスタムDPI環境となる。

DpiScalingVerってのはよくわからんけど、何故だかWin10のデフォでは0x00001000と、数字が減ってる。これに関してはWin8やWin8.1のデフォ値が分からんので何とも。

以上、120dpi環境の人は試してみると良いかも。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です