<<戻る

日記 intime o'

ico(またはcur)のファイルフォーマット 2009/1/29(Thu.)
画像ico(またはcur)の中身を書いてみる。

数字は、特に何もない限り10進法。
0xが頭に付く数字は16進法。単位はbyte。

16鍼法は前後が逆になったりする(リトルエンディアン)。
例えば、0xABCDEFをEF CD ABで表す。

(1)画像の中身は上から順に
・ファイルヘッダ
・情報
・データ部

(2)それぞれの詳細

(i)ファイルヘッダ
予約領域    data size: 2byte 0x00 0x00
ファイルタイプ data size: 2byte icoでは0x01 0x00, curでは0x02 0x00
アイコンの個数 data size: 2byte 0x01 0x00(1個の場合)

(ii)情報
アイコンの幅  data size: 1byte 32くらい(例えば)
アイコンの高さ data size: 1byte
アイコンの色数 data size: 1byte (0x00にすれば256)
予約領域    data size: 1byte
hotspotX    data size: 2byte (curの場合のカースル座標)
hotspotY    data size: 2byte (curの場合のカースル座標)
データサイズ  data size: 4byte
データ部のoffset data size: 4byte

複数アイコンを含める場合、ヘッダのアイコンの個数を増やして、
アイコンの幅~データサイズを繰り返す。

(iii)データ部
ここのoffset  data size: 4byte 40にしとけばいい
アイコンの幅  data size: 4byte
アイコンの高さ data size: 4byte
カラープレーン数data size: 2byte
色数(bit)   data size: 2byte
圧縮形式    data size: 4byte
水平解像度   data size: 4byte
垂直解析度   data size: 4byte
使用色数    data size: 4byte
重要な色数   data size: 4byte

(iii)データ部
まずピクセルデータ。BGR0の順番で計4byte。ただし、0は予約領域。
次にマスクデータ。1ピクセルに対して1bitで0なら通常、1なら透過。
これを1にした時、そのときピクセルは(0x00)*4にすれば透過、
ピクセルを(0xff)*4にしたら反転。

 ピクセルの順番はbmpと同じで、一番左下から始まり、右に進み端ま
で来たら左に戻って一つ上の行に行き、ふたたび右に進み…の繰り返し。

参考:
http://www.google.co.jp/search?hl=ja&q=ico%E3%80%80%E3%83%95%E3
%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3
%83%83%E3%83%88

コメ(0) | トラ(0)


(c)Kero's World