ディスプレイのピクセル密度に対するWindows 8のスケーリング機能 まとめ
Windowsにはディスプレイのピクセル密度に合わせて画面をスケーリングさせる機能が備わっています。ここではWindows 8のスケーリング機能を説明します。
Windows 8のスケーリング機能は、デスクトップ側とストア・アプリ側で異なり、これら2つの設定や動作は完全に独立しています。なお、スタート画面はストア・アプリ側に含まれます。
デスクトップ側
デスクトップ側のスケーリング機能は、「コントロール パネル\デスクトップのカスタマイズ\ディスプレイ」から[小 - 100%]、[中 - 125%]、[大 - 150%]の3種類を設定可能です。
また、[ディスプレイ]画面の中ほどにある[カスタムサイズ変更オプション]をクリックすることで、1%刻みでスケール値を設定できます。最小値は100%、最高値は500%です。
なお、スケーリングの方式は2種類存在し、[カスタムサイズ変更オプション]画面の[Windows XP形式のスケーリングを使用する]チェックボックスで設定できます。2種類のスケーリング方式については、別の投稿で詳しく紹介します。
[ディスプレイ]画面のスクリーンショットを見ると分かりますが、[小 - 100%]の右側に[既定]と記載されています。この[既定]は、接続しているディスプレイのピクセル密度によって変化します。
たとえば、日本ではまだ発売されていませんが、Surface Windows 8 Proは10.6インチで1920×1080(フルHD)の画素数となっており、このスペックから算出するピクセル密度は208PPI(pixel per inch)です。Surface Windows 8 Proでは、150%が[default]つまり、既定となっています。
ここで2つの疑問を抱くかと思います。1つは、Windowsが判断しているディスプレイのピクセル密度とはどうやって取得しているのかということ。もう1つは、[中 - 125%]、[大 - 150%]が[既定]に設定されるしきい値は、それぞれいくつなのかということです。
Windowsが何を基にピクセル密度を判断しているのかは定かではありませんが、ディスプレイの物理サイズはGetDeviceCaps 関数を使って取得することが可能であるため、おそらくはこの値と画素数からピクセル密度を算出していると思われます。なお、この関数にHORZSIZE、VERTSIZEを渡して返ってくる値は、これまで試した物理デバイスでは1桁目が必ず0になります。つまり、実際にメジャーなどを使って物理的に図った際に195mmあっても、関数で帰ってくる値は190だったりします。しかし、Windowsストア・アプリ開発に使用するシミュレーターでは、132といった具合にきちんと1桁目まで正確な値が返ってきます。
何が言いたいかといいますと、システム側から取得できるディスプレイサイズはミリ単位まで正確な値ではないため、もしこの値を基にピクセル密度を算出しているとすれば、スケーリングの[既定]が何になるかは必ずしもディスプレイのスペック上からは判断できないということになります。
それを裏付ける事実として、SONY VAIO Duo 11とICONIA W700Dはスペック上はどちらも11.6インチのフルHDであり、スペック上から算出するピクセル密度は190PPIですが、前者は[既定]が125%になっているのに対して、後者は150%となっているようです。
「VAIO Duo 11」の“上質なスライドボディ”を丸裸にする (6/7) - ITmedia PC USER
ICONIA W700D買いました - SourceChord
では、[中 - 125%]、[大 - 150%]が[既定]に設定されるピクセル密度のしきい値はいくつなのでしょうか。これは残念ながらドキュメントとして確認できるものがありませんでした。しかしながら、実際に様々なディスプレイにおける結果をまとめてみると、以下のような結果になります。
スペック |
GetDeviceCaps関数 |
- |
- |
||||||
---|---|---|---|---|---|---|---|---|---|
ハードウェア |
ディスプレイ 対角線の長さ(インチ) |
総画素数(ピクセル) |
ピクセル密度(PPI) |
ディスプレイサイズ(mm) |
ディスプレイ 対角線の長さ(インチ) |
横方向のピクセル密度(PPI) |
縦方向のピクセル密度(PPI) |
デスクトップ側 DPIスケーリング既定値(%) |
ストア・アプリ側 スケーリング(%) |
Dell ST2420L(ディスプレイ) |
24 |
1920×1080 |
91.788 |
530×300 |
23.977 |
92.015 |
91.44 |
100 |
100 |
Samsung Series 7 Slate (700T) |
11.6 |
1366×768 |
135.094 |
260×140 |
11.626 |
133.448 |
139.337 |
100 |
100 |
lenovo ThinkPad W510 |
15.6 |
1920×1080 |
141.212 |
340×190 |
15.334 |
143.435 |
144.379 |
125 |
100 |
Dell XPS 12 |
12.5 |
1920×1080 |
176.233 |
280×160 |
12.696 |
174.171 |
171.45 |
125 |
100 |
SONY VAIO Duo 11 |
11.6 |
1920×1080 |
189.906 |
- |
- |
- |
- |
125 |
140 |
acer ICONIA W700D |
11.6 |
1920×1080 |
189.906 |
- |
- |
- |
- |
150 |
140 |
Microsoft Surface Windows 8 Pro |
10.6 |
1920×1080 |
207.821 |
230×130 |
10.401 |
212.034 |
211.015 |
150 |
140 |
この表から読み取ると、GetDeviceCaps関数を使って取得した値から算出したピクセル密度が140PPIあたりが125%、190PPIあたりが150%くらいでしきい値がありそうです。
なお、この表の作成のためにディスプレイの各情報を取得するサンプルアプリを作成しましたので、別の投稿で公開したいと思います。
ストア・アプリ側
ストア・アプリ側のスケーリングは完全に自動です。ユーザーが設定を変更したりスケーリングに関与することはできません(少なくとも正式な方法では)。以下のページに記載されているように、特定のピクセル密度を超えた場合に、140%、180%にスケーリングされます。
ピクセル密度に合わせたスケーリングのガイドライン - Windows app development
100% (スケーリングが適用されない場合)
最小 DPI が 174 の 1920 x 1080 デバイスで 140%
最小 DPI が 240 の 2560 x 1440 デバイスで 180%
以下のページに掲載されている画像がとても分かりやすいです。
ただし、スタート画面のタイルのサイズについては80%というサイズが存在します。上の表でいうと、最小ピクセル密度91.44PPIの「Dell ST2420L(ディスプレイ)」は、タイルサイズが80%となります。
Tile and toast visual assets (Windows Runtime apps) | Microsoft Docs
そのため、同じ1920×1080でスケーリングが100%であっても、タイルが5行表示になるものと、6行表示になるものが存在します。
先ほどのデスクトップ側の表に、ストア・アプリ側のスケーリング値も記載してあります。ここで注目したいのは、Dell XPS 12のスペック上のピクセル密度が140%のしきい値である174PPIを超える176.233PPIであるにもかかわらず、スケーリングは100%であるということです。GetDeviceCaps関数を使って取得した値から算出したピクセル密度の最小値は171.45PPIであるため、おそらくこの値が採用され100%となっているのではないかと推測できます。
まとめ
宣伝
グレープシティの以下のWindowsフォームコンポーネントは、125%のWindows XP形式のスケーリングをサポートしています。
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- アプリケーション開発支援ツール/コンポーネント/ライブラリ | Developer Tools - グレープシティ株式会社
- SPREAD for WPF 2.0J | Developer Tools - グレープシティ株式会社
- InputManPlus for WPF 2.0J | Developer Tools - グレープシティ株式会社