Hatena::ブログ(Diary)

Yuya Yamaki’s blog このページをアンテナに追加 RSSフィード Twitter

2013年03月06日(水曜日)

ディスプレイのピクセル密度に対するWindows 8のスケーリング機能 まとめ

 Windowsにはディスプレイのピクセル密度に合わせて画面をスケーリングさせる機能が備わっています。ここではWindows 8のスケーリング機能を説明します。


 Windows 8のスケーリング機能は、デスクトップ側とストア・アプリ側で異なり、これら2つの設定や動作は完全に独立しています。なお、スタート画面はストア・アプリ側に含まれます。


デスクトップ側

 デスクトップ側のスケーリング機能は、「コントロール パネル\デスクトップのカスタマイズ\ディスプレイ」から[小 - 100%]、[中 - 125%]、[大 - 150%]の3種類を設定可能です。


f:id:Yamaki:20130304174350p:image


 また、[ディスプレイ]画面の中ほどにある[カスタムサイズ変更オプション]をクリックすることで、1%刻みでスケール値を設定できます。最小値は100%、最高値は500%です。


f:id:Yamaki:20130304174824p:image


 なお、スケーリングの方式は2種類存在し、[カスタムサイズ変更オプション]画面の[Windows XP形式のスケーリングを使用する]チェックボックスで設定できます。2種類のスケーリング方式については、別の投稿で詳しく紹介します。


 [ディスプレイ]画面のスクリーンショットを見ると分かりますが、[小 - 100%]の右側に[既定]と記載されています。この[既定]は、接続しているディスプレイのピクセル密度によって変化します。


 たとえば、日本ではまだ発売されていませんが、Surface Windows 8 Proは10.6インチで1920×1080(フルHD)の画素数となっており、このスペックから算出するピクセル密度は208PPI(pixel per inch)です。Surface Windows 8 Proでは、150%が[default]つまり、既定となっています。


f:id:Yamaki:20130304175846p:image


 ここで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

※「SONY VAIO Duo 11」と「acer ICONIA W700D」は手元に実機がないため、GetDeviceCaps関数の値は未計測です。


 この表から読み取ると、GetDeviceCaps関数を使って取得した値から算出したピクセル密度が140PPIあたりが125%、190PPIあたりが150%くらいでしきい値がありそうです。


 なお、この表の作成のためにディスプレイの各情報を取得するサンプルアプリを作成しましたので、別の投稿で公開したいと思います。


ストア・アプリ側


 ストア・アプリ側のスケーリングは完全に自動です。ユーザーが設定を変更したりスケーリングに関与することはできません(少なくとも正式な方法では)。以下のページに記載されているように、特定のピクセル密度を超えた場合に、140%、180%にスケーリングされます。


ピクセル密度に合わせたスケーリングのガイドライン - Windows app development

100% (スケーリングが適用されない場合)

最小 DPI が 174 の 1920 x 1080 デバイスで 140%

最小 DPI が 240 の 2560 x 1440 デバイスで 180%


 以下のページに掲載されている画像がとても分かりやすいです。


さまざまな画面への対応 – Building Windows 8

f:id:Yamaki:20130228175759j:image


 ただし、スタート画面のタイルのサイズについては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%となっているのではないかと推測できます。


まとめ


f:id:Yamaki:20130306131830p:image


宣伝


 グレープシティの以下のWindowsフォームコンポーネントは、125%のWindows XP形式のスケーリングをサポートしています。



 「なぜWindowsフォームだけ?」「なぜ125%のみ?」の理由は、別の投稿で詳しく紹介します。


スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証