先週あたりにエクスプローラでアイコンオーバーレイをやりたくなって、
を参考に作ってたんですが、せっかく 256x256 のアイコンを作っても 48x48 のアイコンが使われてしまったりして悲しかったので、どの表示方法でどのサイズのアイコンが使われるか調べてみました。
検証環境
Windows7 SP1 で、テキストサイズは「中 - 125%(規定)」に設定した状態で検証しています。
表示方法ごとに使われるオーバーレイアイコンのリソース
アイコンのリソースは複数のサイズを持つことができて、
を使うと 16x16、24x24、32x32、48x48、256x256 の 5 種類が標準のサイズとして指定できます。
この 5 種類のリソースを持つアイコンを
- 一方は .ico ファイル単体で
- もう一方はアイコンオーバーレイ表示に利用する形で
エクスプローラ上で表示してみます。
クスプローラの「表示方法」を少しずつ変えていくと、以下のように使われるリソースが変化していきました。
表示方法 | 表示サイズ | .icoプレビュー時に 使われるリソース |
アイコンオーバーレイで 使われるリソース |
---|---|---|---|
特大アイコン | 256 | 256x256 | 256x256 |
: | 123〜250 | 256x256 | 256x256 |
大アイコン | 120 | 256x256 | 256x256 |
: | 65〜119 | 256x256 | 256x256 |
: | 61〜 63 | 256x256 | 48x48 |
中アイコン | 60 | 256x256 | 48x48 |
: | 41〜 59 | 256x256 | 48x48 |
: | 40 | 48x48 | 48x48 |
: | 21〜 39 | 48x48 | 24x24 |
小アイコン | 20 | 24x24 | 24x24 |
一覧 | 20 | 24x24 | 24x24 |
詳細 | 20 | 24x24 | 24x24 |
並べて表示 | 60 | 256x256 | 48x48 |
コンテンツ | 40 | 48x48 | 48x48 |
.ico ファイル(たぶん .exe の場合も同様)では中アイコンくらいから 256x256 のリソースが使われますが、アイコンオーバーレイで使うときは大アイコンくらいにしないと 256x256 のリソースは使われないようです。
Windows7 では 24x24、48x48、256x256 のアイコンしか使われないようですが、昔の Windows では 16x16 や 32x32 が使われていた気がしますし、この 5 種類があれば大丈夫そうですね。
オーバーレイアイコンの表示位置&サイズ
オーバーレイアイコンは元のアイコンの左下に表示されるルールのようで、エクスプローラの「表示方法」によってその表示サイズが大きく変わります。このあたりの関係も調べてみました。
表示方法 | 表示サイズ | オーバーレイアイコンの 表示サイズ |
元のサイズに対する割合 | アイコンオーバーレイで 使われるリソース (前出) |
---|---|---|---|---|
特大アイコン | 256 | 100 | 39% | 256x256 |
: | 123〜250 | 59〜100 | 48〜39% | 256x256 |
大アイコン | 120 | 58 | 48% | 256x256 |
: | 65〜119 | 41〜 58 | 63〜49% | 256x256 |
: | 61〜 63 | 40 | 66〜63% | 48x48 |
中アイコン | 60 | 40 | 67% | 48x48 |
: | 41〜 59 | 40 | 98〜68% | 48x48 |
: | 40 | 40 | 100% | 48x48 |
: | 21〜 39 | 20 | 95〜51% | 24x24 |
小アイコン | 20 | 20 | 100% | 24x24 |
一覧 | 20 | 20 | 100% | 24x24 |
詳細 | 20 | 20 | 100% | 24x24 |
並べて表示 | 60 | 40 | 67% | 48x48 |
コンテンツ | 40 | 40 | 100% | 48x48 |
途中から徐々にサイズが大きくなっていきますが、ここは
オーバーレイアイコンのサイズ = 元アイコンのサイズ * 5 / 16 + 20
というような関係になっていそうです。(±1 程度の誤差はありますが、丸め誤差か何かでしょう。)
グラフにするとこんな感じでした。
場合によっては元アイコンの全体を占めるケースもあるのに、特大アイコンにした場合は
のように幅の 39% 程度しか占めなくなります。TortoiseXxx や Dropbox のアイコンが左下に表示されるので、それにかぶらないよう右上にオーバーレイアイコンを出す形で考えていたのですが、そうすると特大アイコンで表示した場合に(この赤い部分の右上にしかオーバーレイされず)真ん中くらいにオーバーレイアイコンが表示されて格好悪いことになってしまいそうです。
(2011-07-19 追記 ここから)
各リソースがオーバーレイ時にどのようなサイズで表示されるかもまとめました。
リソース | 元のサイズに対する割合 |
---|---|
256x256 | 39〜63% |
48x48 | 63〜100% |
24x24 | 51〜100% |
(2011-07-19 追記 ここまで)
もとのサイズに対して 100% 等の大きな割合で表示されるのは 24x24 と 48x48 の二種類なので、これらは右上に出す前提のデザインにして、256x256 だけ左下に表示されるようなデザインにするという手もあるかもしれません。
2 つの表を見比べてみると
オーバーレイアイコンが縮小されるから使われるリソースが .ico のプレビューとずれていただけで、表示サイズとリソースの関係は同じルールになってました。
表示方法 | オーバーレイアイコンの 表示サイズ |
アイコンオーバーレイで 使われるリソース |
---|---|---|
特大アイコン | 100 | 256x256 |
: | 59〜100 | 256x256 |
大アイコン | 58 | 256x256 |
: | 41〜 58 | 256x256 |
: | 40 | 48x48 |
中アイコン | 40 | 48x48 |
: | 40 | 48x48 |
: | 40 | 48x48 |
: | 20 | 24x24 |
小アイコン | 20 | 24x24 |
一覧 | 20 | 24x24 |
詳細 | 20 | 24x24 |
並べて表示 | 40 | 48x48 |
コンテンツ | 40 | 48x48 |
今回使った補助スクリプト
いちいち表示サイズ計測するのは面倒なので、真っ赤なアイコンファイルを作って、「画面内で赤の pixcel が連続している最大長を出力する」Python スクリプトを走らせながら検証していました。
スクリプトは gist に置いています。
- https://gist.github.com/1072207/5b6a61f41fe5c9cfc642ca5dc9d9bf0f50f1c5ae
- 赤の長さを測る最初のバージョン
- https://gist.github.com/1072207/b699537ceb372c11b2793ed8a4e5457b824c4f03
- 緑の長さも測るようにしたバージョン
画面の右端から左端に連続した色があるような場合は対応できない手抜きスクリプトですが、手軽に作れたわりに役に立ちました。
今回参考になったページです。
- 西尾泰和のブログ: Pythonでマウスポインタの位置を取得→その周辺のスクリーンキャプチャ
- とっかかり。
- Python Imaging Library (PIL)
- キャプチャに必要なライブラリ&マニュアル
- 6.5.1 Itertool関数
- 赤が連続する長さを求めるのに使った
-
-
- -
-
書いてから気づいたんですが、こういう情報ってどこかにまとまってそうですね・・・。もし何かご存知な方は教えてください。