miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました。 https://zenn.dev/miau に移行しようと考え中

Windows7 エクスプローラのアイコンオーバーレイで使われるアイコンのサイズ

先週あたりにエクスプローラでアイコンオーバーレイをやりたくなって、

を参考に作ってたんですが、せっかく 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 に置いています。

画面の右端から左端に連続した色があるような場合は対応できない手抜きスクリプトですが、手軽に作れたわりに役に立ちました。

今回参考になったページです。

      • -

書いてから気づいたんですが、こういう情報ってどこかにまとまってそうですね・・・。もし何かご存知な方は教えてください。