アイコンファイルの形式(アイコンファイルフォーマット)

アイコン形式(.ico)の資料が少ないので解析結果を下に示しておきます。役立ててください。ただし不明な点がいくつかあります。解析結果に責任は持ちません
表記はアイコンファイルのバイナリをそのままにしています。そのためリトルエンディアン(下位バイトが前にくる)になっています。
初めの2バイトは(00 00)です(括弧内は十六進数以下同じ)。ここがアイコンファイルだと示していると思います。
次の2バイトは(01 00)です。これが(02 00)だとカーソル(.cur)になるようです。
次の2バイトはアイコンの個数(一つのファイルにいくつも存在できるため)を表します。(01 00)ならアイコンが一つだけ含まれています。
ここから下はアイコンの個数分繰り返されます。
その次の1バイトはアイコンの幅、次は高さ。次は色数を示しています。それぞれ(00 00)の時は256です。
次の1バイトは用途不明です。
次の2バイトはカーソルの場合ポイントする場所(ホットスポット)のX座標を示すようです。その次の2バイトはY座標のようです。
次の4バイトはアイコンのデータサイズを示すようです。
次の4バイトはアイコンの実体の先頭の位置を示します(ファイル先頭からの絶対バイト)。この次の(下の下の下の行の)先頭に示すって事でござる。
ここまでをイメージの数だけ繰り返します。
ここからをさらにイメージの数だけ繰り返します。
4バイトがここからパレットの直前までのバイト数です。
4バイトが幅、4バイトが高さです。
2バイトがカラープレーン数です。
2バイトが色数(ビットで表している)です。
4バイトが圧縮形式だそうです。
4バイトが水平解像度、4バイトが垂直解像度だそうです。
4バイトが使用色数、4バイトが重要な色数だそうです。
256色以下の時はパレットデータです。色数×4バイトです。BGR)の順番です。その後に意味のない(00)が続いて4バイトになります。
データです。色数×必要なバイト数です。16色のときは1バイトに2ピクセル分のデータが入ります。
マスクデータです。128バイト固定です。1バイトに8ピクセル分入っています。0なら不透明1なら透明です。1の時はピクセルデータが(00)なら透けます。(FF)なら色が背景から反転します(256色の時)。
データはYのMAX(最大値−1)からX方向にデータが回って、Xが最大になったら、Yが1減ります。
   0123456789101112131415
↑(15)→→→→→→→→→→→→→→→最後
↑(14)→→→→→→→→→→→→→→→↑
↑(13)→→→→→→→→→→→→→→→↑
↑(12)→→→→→→→→→→→→→→→↑
略  →→→→→→→→→→→→→→→↑
↑( 3)→→→→→→→→→→→→→→→↑
↑( 2)→→→→→→→→→→→→→→→↑
↑( 1)→→→→→→→→→→→→→→→↑
↑( 0)初め→→→→→→→→→→→→→上へ
アニメーションカーソル(.ani)はよくわかりません。
実際にバイナリエディタでアイコンを開いてみてざくざく区切ってみればその内分かると思います。

戻る