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

ICO は、Microsoft Windowsにおけるアイコンで使用する画像ファイルフォーマット。CUR はマウスポインタ用でICOとほぼ同じフォーマットだが、ヘッダにおける識別バイトとホットスポットの記述が異なる。
ICOファイルには、1つ以上の画像が格納されており、各画像の大きさや色深度は様々である。
IANAによって公式に登録されているICOファイルのMIMEタイプは codice_1 である。これが登録される以前、未登録トークンを "x-" で表すという規則から codice_2 が使われていた。間違ったMIMEタイプを使っている例がよくあり、codice_3、codice_4、codice_5、codice_6 などがある。Webサーバで .ico ファイル用のMIMEタイプを設定していることは稀で、その場合はデフォルトのMIMEタイプとして codice_7 や codice_8 などが使われる。
アイコンの大きさ、色深度、透明部分のデータ.
本来は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 になっており、複数のアイコンリソースが格納されている。
ファイル構造.
全ての値はリトルエンディアン形式で格納される。大きさはバイト数。
ヘッダ.
サイズは6バイト。
ディレクトリ.
サイズは16バイト。
アイコン.
AND/XORビットマップ形式かPNG形式で書きこまれる。
Windows Vistaでの推奨アイコンサイズ.
Windows UIでは、様々なサイズのアイコンを使う場面が決まっている。マイクロソフトはこれについてガイドラインを提供している。