ICO (ファイルフォーマット) – Wikipedia

ICO は、Microsoft Windowsにおけるアイコンで使用する画像ファイルフォーマット。CUR はマウスポインタ用でICOとほぼ同じフォーマットだが、ヘッダにおける識別バイトとホットスポットの記述が異なる。

ICOファイルには、1つ以上の画像が格納されており、各画像の大きさや色深度は様々である。

IANAによって公式に登録されているICOファイルのMIMEタイプは image/vnd.microsoft.icon である。これが登録される以前、未登録トークンを x- で表すという規則から image/x-icon が使われていた。間違ったMIMEタイプを使っている例がよくあり、image/icoimage/icontext/icoapplication/ico などがある。Webサーバで .ico ファイル用のMIMEタイプを設定していることは稀で、その場合はデフォルトのMIMEタイプとして text/htmltext/plain などが使われる。

アイコンの大きさ、色深度、透明部分のデータ[編集]

本来は32×32ピクセルの矩形で16色だったが、最近[いつ?]のMicrosoft Windowsは複数サイズと色深度のアイコンをサポートしている。Windows XPより以前から、アイコン画像の大きさは1×1ピクセルから255×255ピクセルまで可能で(正方形でなくてもよい)、色深度は1ビット、4ビット、8ビット、16ビット、24ビットがある。一般にアイコンファイルには32×32(スタートメニューやフォルダを「大アイコン」表示した場合)と16×16(ウィンドウのタイトルバー、スタートメニューのサブメニュー、フォルダの「小アイコン」表示や一覧表示、詳細表示など)の大きさのものを格納している。

アイコン画像データは常に2つのビットマップ、ANDビットマップとXORビットマップで構成される。ANDビットマップはピクセル毎に1ビットが対応し、背景に対してアイコン画像の各ピクセル位置が上書きされるか否かを指定している。XORビットマップはそれを基にXOR操作で上書きする。これによって画像に透明な部分を作ることができ、同時に背景を反転させるなどの技が可能になっている。

Windows XPでは、32ビットの色深度のアイコン画像、アルファチャンネルによる透明化が可能となり、影をつけた半透明部分やアンチエイリアスされた輪郭が可能となっている。32ビット画像を32ビットモードで表示する際はANDビットマップは使用しないが、32ビット画像でも24ビットモードではアルファチャンネルが削除されるため、24ビット画像が格納されていないときは32ビット画像にANDビットマップを適用して表示する。32ビット画像にANDビットマップが付随していない場合、24ビットモードで表示しなければならないときは、透明化パターンが不正なものとなる。Windows XPではさらに96×96ピクセルのアイコンを表示できるが、マイクロソフトは48×48ピクセルまでを推奨しており、それ以上の大きなアイコンは一般的ではない。Windows XPは適当な大きさの画像がない場合、256×256ピクセル以上の大きさの画像でも読み込んで縮小して使う。ただし、そのような大きさのアイコン画像をそのまま使うことはない。

Windows Vistaは256×256ピクセルのアイコン画像をそのまま表示するモードもサポートしており、(必須ではないが)圧縮したPNGフォーマットもサポートしている。PNGフォーマットの場合、PNGの持つ透明性データを直接利用するため、通常のフォーマットのANDビットマップやXORビットマップは存在しない。ICOファイルに256×256ピクセルのアイコンを格納する場合32ビットの色深度のみ利用でき、PNGフォーマットを使ってファイルの肥大化を防ぐことが推奨されている。Windows Vistaでは表示のズーミング(拡大・縮小表示)ができるため、アイコンファイルにも様々な大きさのものを格納しておくことが推奨されている。

ICOファイルはいくつかのグラフィックソフトウェアで編集・出力が可能で、GIMP、CorelDRAW、IrfanView、Paint.NET(プラグインが必要)などがある。

アイコンライブラリ[編集]

アイコンライブラリはWindowsのアイコン群をパッケージ化する手段である。基本的にはNew Executable形式のバイナリファイルで、拡張子が .ICL になっており、複数のアイコンリソースが格納されている。

ファイル構造[編集]

全ての値はリトルエンディアン形式で格納される。大きさはバイト数。

アイコンヘッダ ICO/CURファイルに関する包括的情報を格納している。
ディレクトリ #1 1番目の画像に関する包括的情報を格納している。
ディレクトリ #n 最後の画像に関する包括的情報。
アイコン #1 1番目の画像の実際のデータ。AND/XORビットマップ形式か、PNG形式
アイコン #n 最後のアイコン画像データ

ヘッダ[編集]

サイズは6バイト。

オフセット 大きさ 内容
0 2 予約済み。常に0
2 2 タイプ。アイコン (.ico) は 1、カーソル (.cur) は 2
4 2 このファイルにある画像の数

ディレクトリ[編集]

サイズは16バイト。

オフセット 大きさ 内容
0 1 幅。256ピクセルの場合は0になる。
1 1 高さ。256ピクセルの場合は0になる。
2 1 カラーパレットの色数。カラーパレットを含まない場合は0になる。
3 1 予約済み。常に0[1]
4 2 ICOフォーマットではカラープレーン数1[2]。CURフォーマットではホットスポットのX座標。
6 2 ICOフォーマットではピクセル毎のビット数[3]。CURフォーマットではホットスポットのY座標。
8 4 対応するビットマップデータのバイト数。
12 4 対応するビットマップデータまでのファイル内オフセット。

アイコン[編集]

AND/XORビットマップ形式かPNG形式で書きこまれる。

Windows Vistaでの推奨アイコンサイズ[編集]

Windows UIでは、様々なサイズのアイコンを使う場面が決まっている。マイクロソフトはこれについてガイドラインを提供している[4]

関連項目[編集]

脚注・出典[編集]

  1. ^ マイクロソフトの技術文書では常に0だとしているが、.NETに組み込みのアイコンエンコーダ (System.Drawing.Icon.Save) は255という値にしている。どちらにしてもOSはこの値を無視する。
  2. ^ 他のデータから推測できるので、0を設定することがある。1より大きな値をセットすると、下のピクセル毎のビット数と掛け合わせて、最終的な色深度を求めるのに使われるはずである。ただし、Windowsの各バージョンが1より大きい値をどう扱うかは不明である。
  3. ^ 他のデータから推測できるので、0を設定することが多い。特にPNGでない場合、画像サイズとビットマップデータのサイズからピクセル当たりのビット数は計算可能である。PNGの場合はPNGフォーマットにこの値が含まれている。Windowsのあらゆるバージョンで、ここを0に設定してもピクセル当たりのビット数を計算できるかは不明である。
  4. ^ Icons (Design basics) – Win32 apps | Microsoft Docs 特に “Color and saturation” と “Size requirements” の節を参照。

外部リンク[編集]