Microsoft Windowsで用いられる
アイコンファイルは、ICOファイル形式で保存されます。マウスポインタを表すCURファイルも、ICOファイルとほぼ同様のフォーマットですが、ファイルヘッダーの一部とホットスポットの記述に違いがあります。
ICOファイルは、様々なサイズや
色深度の画像を複数格納できます。IANA(Internet Assigned Numbers Authority)によって公式に登録されたMIMEタイプは`image/vnd.microsoft.icon`ですが、以前は`image/x-icon`が広く使用されていました。現在でも、`image/ico`、`image/icon`、`text/ico`、`application/ico`など、間違ったMIMEタイプが使われるケースが多く見られます。
Webサーバーにおいて、.icoファイルに対する適切なMIMEタイプの設定が不足している場合、デフォルトのMIMEタイプ(例:`text/html`、`text/plain`)が適用されることがしばしばあります。
初期のWindowsでは、
アイコンは通常32×32ピクセルの16色画像でしたが、現代のWindowsでは、様々なサイズと
色深度の
アイコンがサポートされています。Windows XP以前から、
アイコンのサイズは1×1ピクセルから255×255ピクセルまで可能で、正方形である必要はありません。
色深度は1ビット、4ビット、8ビット、16ビット、24ビットがサポートされています。多くの場合、32×32ピクセル(大
アイコン表示時)と16×16ピクセル(小
アイコン表示時)の
アイコンがファイルに含まれています。
各
アイコン画像は、ANDビットマップとXORビットマップという2つのビットマップで構成されます。ANDビットマップは、背景との合成方法を制御し、XORビットマップが実際の画像データとなります。この仕組みによって、透明部分を持つ
アイコンや、背景と複雑に相互作用する効果を実現できます。
Windows XPでは、32ビットの
色深度と
アルファチャンネルによる透明化がサポートされ、より精細で滑らかな
アイコン表現が可能となりました。32ビットモードではANDビットマップは不要ですが、24ビットモードでは
アルファチャンネルが削除されるため、ANDビットマップが使用されることがあります。32ビット画像にANDビットマップが欠損している場合、24ビットモードでの表示は不正な透明化パターンとなる可能性があります。Windows XPでは96×96ピクセルの
アイコンもサポートされましたが、
マイクロソフトは48×48ピクセルまでの使用を推奨しています。必要に応じて、256×256ピクセル以上の画像を縮小して表示することも可能です。
Windows Vistaでは、256×256ピクセルの
アイコンをそのまま表示するモードが追加され、圧縮PNGフォーマットのサポートも導入されました。PNGを使用する場合、PNGが持つ
アルファチャンネルを直接利用するため、ANDビットマップとXORビットマップは不要となります。256×256ピクセルの
アイコンをICOファイルに格納する際は、32ビットの
色深度を使用し、PNGフォーマットによる圧縮が推奨されます。Windows Vistaではズーム機能が強化されたため、様々なサイズの
アイコンを格納することが推奨されています。
ICOファイルの編集や作成には、
GIMP、
CorelDRAW、IrfanView、Paint.NET(プラグインが必要)などの
グラフィックソフトウェアが使用できます。
Windowsの
アイコン群をパッケージ化するために、
アイコンライブラリ(.ICLファイル)が使用されます。これは、複数の
アイコンリソースをまとめたNew Executable形式のバイナリファイルです。
ファイル構造
ICOファイルは、リトルエンディアン形式でデータが格納されます。ファイルは、ヘッダー、ディレクトリ、
アイコンデータの3つの主要な部分から構成されます。
アイコンデータは、AND/XORビットマップ形式またはPNG形式で格納されます。
Windows Vista以降の推奨アイコンサイズ
Windows Vista以降では、様々なUI要素で異なるサイズの
アイコンが使用されます。
マイクロソフトは、これらのサイズに関するガイドラインを提供しています。
関連項目
Windows bitmap
Favicon (Webサイト用
アイコンフォーマット)
* ANI (アニメーション
カーソルフォーマット)
ICOファイルは、Windowsシステムにおいて重要な役割を果たすファイル形式であり、その理解はWindowsアプリケーション開発において不可欠です。