GIM

PSP用画像フォーマットのGIMファイルについて。
GIMファイルはパレットデータ、画像データなどの各パーツに分かれて記述されています。
パレットと画像データ部分は記述順に制限はなく、どちらを先に書いても読めるようです。
リトルエンディアンでの記述は{L},ビッグエンディアンでの記述は{B}と表記しておきます。
gim→bmp変換ソフトはソフトのページから

2007/11/09
「PS3用テーマ作成ツール」のアーカイブ内にSCE純正のGIM変換ツール「GimConv 1.20h」が同梱されています。
GimConv.cfgファイルの編集により、さまざまな設定でGIMファイルに変換できます。
ちなみにgim2bmpでbmpに変換できるgimファイルは
pixel_order = normal,faster
pixel_channel = rgba
image_format = index8
palette_format = rgba8888
の設定のファイルです。
以下の詳細説明も、上記の設定で変換した場合の説明です。

[file header]
+0x00 [04]Signature
{L} MIG.
{B} .GIM
+0x04 [04]GIM Version
{L} 00.1
{B} 1.00
+0x08 [04]Format (スタンダードGIM、PS3用GIMではnull)
{L} PSP[0x00]
{B} [0x00]PSP
+0x0C [04]null
eof addr part
+0x00 [02]0x02
+0x02 [02]null
+0x04 [04]End of File addr (このパートの先頭からのファイル終端のオフセット)
+0x08 [04]part size (実質16bytes[0x10]固定)
+0x0C [04]0x10?
fileinfo addr part
+0x00 [02]0x03
+0x02 [02]null
+0x04 [04]fileinfo addr (このパートの先頭からのfileinfo data partのオフセット)
+0x08 [04]part size (実質16bytes[0x10]固定)
+0x0C [04]0x10?
palette data part
+0x00 [02]0x05
+0x02 [02]null
+0x04 [04](+0x08と同じ値?)
+0x08 [04]part size
+0x0C [04]0x10?
+0x10 [02]data offset?
+0x12 [02]null?
+0x14 [02]palette_format
0x00:RGBA5650
0x01:RGBA5551
0x02:RGBA4444
0x03:RGBA8888
+0x16 [02]null?
+0x18 [02]palette colors
0x10:16 colors
0x100:256 colors
+?
+0x28 [04]0x30?
+0x2C [04]0x40?
+0x30 [04]part size -16[0x10]
+0x34 [04]null?
+0x38 [02]0x02?
+0x3A [02]0x01?
+0x3C [02]0x03?
+0x3E [02]0x01?
+0x40 [04]0x40?
+0x44 [12]null?
+0x50 [xx]palette data(16色なら16x4=64B、256色なら256x4=1024B)
GIM用のパレットのデータはR,G,B,Aの4バイト×色数と並んでいる。
BMP用のパレットのデータはB,G,R,Aの順なのでR,Bの値の入れ替えが必要。
image data part
+0x00 [02]0x04
+0x02 [02]null
+0x04 [04](+0x08と同じ値?)
+0x08 [04]part size
+0x0C [04]0x10?
+0x10 [02]data offset?
+0x12 [02]null?
+0x14 [02]image_format
0x00:rgba5650
0x01:rgba5551
0x02:rgba4444
0x03:rgba8888
0x04:index4
0x05:index8
0x06:index16
0x07:index32
+0x16 [02]pixel_order
0x00:normal
0x01:faster (PSP高速ピクセル格納形式 [16x8ブロック再配置])
+0x18 [02]visible width(XMBアイコンなどに使われる可視領域サイズ)
+0x1A [02]visible height( 同 )
+0x1C [02]color depth
index4:0x04
index8:0x08
index16:0x10
index32:0x20
rgba****:0x20
+0x1E [02]0x10?
+0x20 [02]0x08?
+0x22 [02]0x02?
+0x24 [04]null?
+0x28 [04]0x30?
+0x2C [04]0x40?
+0x30 [04]part size -16[0x10]
+0x34 [04]null?
+0x38 [02]0x01?
+0x3A [02]0x01?
+0x3C [02]0x03?
+0x3E [02]0x01?
+0x40 [04]0x40?
+0x44 [12]null?
+0x50 [xx]image data
fileinfo data part (このパートがないファイルもある。)
+0x00 [02]0xFF
+0x02 [02]null
+0x04 [04](+0x08と同じ値?)
+0x08 [04]part size
+0x0C [04]0x10?
+0x10 [xx](自由に記述可能)
GimConvというソフトで変換されていることが多いようで、
変換元ファイル名(0x00)PCユーザー名?(0x00)日時(0x00)GimConv 1.xx
と書かれていることが多い。