ICO (ファイルフォーマット)
| 拡張子 | .ico |
|---|---|
| MIME Type | |
| UTI | com.microsoft.ico |
| 開発者 | マイクロソフト |
| 種別 | アイコン画像ファイルフォーマット |
| 拡張子 | .cur |
|---|---|
| 開発者 | マイクロソフト |
| 種別 | マウスポインタ画像ファイルフォーマット |
ICO は、Microsoft Windowsにおけるアイコンで使用する画像ファイルフォーマット。CUR はマウスポインタ用でICOとほぼ同じフォーマットだが、ヘッダにおける識別バイトとホットスポットの記述が異なる。
ICOファイルには、1つ以上の画像が格納されており、各画像の大きさや色深度は様々である。
IANAで公式に登録しているICOファイルのMIMEタイプは image/vnd.microsoft.icon である。これが登録される以前、未登録トークンを x- で表すという規則から image/x-icon が使われていた。間違ったMIMEタイプを使っている例がよくあり、image/ico、image/icon、text/ico、application/ico などがある。Webサーバで .ico ファイル用のMIMEタイプを設定していることは稀で、その場合はデフォルトのMIMEタイプとして text/html や text/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ピクセルのアイコンを格納する場合、PNGフォーマットを使ってファイルの肥大化を防ぐことが推奨されている。Windows Vista では表示のズーミング(拡大・縮小表示)ができるため、アイコンファイルにも様々な大きさのものを格納しておくことが推奨されている。
ICOファイルはいくつかのグラフィックソフトウェアで編集・出力が可能で、GIMP、CorelDRAW、IrfanView、Paint.NET(プラグインが必要)などがある。
アイコンライブラリ [編集]
アイコンライブラリはWindowsのアイコン群をパッケージ化する手段である。基本的には New Executable 形式のバイナリファイルで、拡張子が .ICL になっており、複数のアイコンリソースが格納されている。
ファイル構造 [編集]
全ての値はリトルエンディアン形式で格納される。大きさはバイト数。
| アイコンヘッダ | ICOファイルに関する包括的情報を格納している。 |
| ディレクトリ[1..n] | 個々の画像に関する包括的情報を格納している。 |
| アイコン #1 | 1番目の画像の実際のデータ。AND/XORビットマップ形式か、PNG形式 |
| ... | |
| アイコン #n | 最後のアイコン画像データ |
ヘッダ [編集]
| オフセット# | 大きさ | 内容 |
|---|---|---|
| 0 | 2 | 予約済み。常に0 |
| 2 | 2 | タイプ。アイコン (.ico) は 1、カーソル (.cur) は 2 |
| 4 | 2 | このファイルにある画像の数 |
ディレクトリ [編集]
| オフセット# | 大きさ | 内容 |
|---|---|---|
| 0 | 1 | 幅。256ピクセルなら0になる。 |
| 1 | 1 | 高さ。256ピクセルなら0になる。 |
| 2 | 1 | 色数。256色以上なら0. |
| 3 | 1 | 予約済み。常に0[1] |
| 4 | 2 | カラープレーン数。ICOフォーマットでは0または1[2]。CURフォーマットではホットスポットのX座標。 |
| 6 | 2 | ICOフォーマットではピクセル毎のビット数[3]。CURフォーマットではホットスポットのY座標。 |
| 8 | 4 | 対応するビットマップデータのバイト数。 |
| 12 | 4 | 対応するビットマップデータまでのファイル内オフセット |
Windows Vista での推奨アイコンサイズ [編集]
Windows UI では、様々なサイズのアイコンを使う場面が決まっている。マイクロソフトはこれについてガイドラインを提供している[4]。
関連項目 [編集]
- Windows bitmap
- Favicon - Webサイト用アイコンフォーマット
脚注・出典 [編集]
- ^ マイクロソフトの技術文書では常に0だとしているが、.NETに組み込みのアイコンエンコーダ (System.Drawing.Icon.Save) は255という値にしている。どちらにしてもOSはこの値を無視する。
- ^ 1より大きな値をセットすると、下のピクセル毎のビット数と掛け合わせて、最終的な色深度を求めるのに使われるはずである。ただし、Windowsの各バージョンが1より大きい値をどう扱うかは不明である。
- ^ 他のデータから推測できるので、0を設定することが多い。特にPNGでない場合、画像サイズとビットマップデータのサイズからピクセル当たりのビット数は計算可能である。PNGの場合はPNGフォーマットにこの値が含まれている。Windowsのあらゆるバージョンで、ここを0に設定してもピクセル当たりのビット数を計算できるかは不明である。
- ^ Icons MSDN; 特に "Color and saturation" と "Size requirements"
外部リンク [編集]
- Icons in Win32 MSDNでのICO実装の解説(Vistaでの拡張は含まれていない)
- ICO(CUR)ファイルフォーマット