アニメーションGIFからイメージデータとグローバル・ローカルカラーテーブル、アプリケーションデータを抜き出すサンプル for HSP by kerupani129 (載せきれないので分割 - その2)
アニメーションGIFからイメージデータとグローバル・ローカルカラーテーブル、アプリケーションデータを抜き出すサンプル for HSP by kerupani129 (載せきれないので分割 - その2)
case 0x21 // 拡張ブロック
block_type=peek(file_data,index) : index+1
switch block_type
case 0xF9 // Graphic Control Extension
block_bs=peek(file_data,index) : index+1 // 必ず4
part_data2=peek(file_data,index) : index+1
block_r=part_data2/32 // 未使用
block_dm=(part_data2\32)/4
block_uif=(part_data2\4)/2
block_tcf=part_data2\2
block_dt=peek(file_data,index) : index+1
block_tci=peek(file_data,index) : index+1
block_bt=peek(file_data,index) : index+1 // 必ず0
swbreak
case 0xFE // Comment Extension
block_size=0
block_cd=""
repeat
block_bs=peek(file_data,index) : index+1
if block_bs=0x00 : break
memexpand block_cd,block_size+block_bs
memcpy block_cd,file_data,block_bs,block_size,index
block_size+block_bs
index+block_bs
loop
block_scd=block_size // コメントデータのサイズ
; GIFのコメントデータ (block_cd) の解析
bsave "dat\\CommentData_"+strf("%02d",block_nid)+".dat",block_cd,block_scd;
swbreak
case 0x01 // Plain Text Extension
block_bs=peek(file_data,index) : index+1 // 必ず12
block_tglp=wpeek(file_data,index) : index+2
block_tgtp=wpeek(file_data,index) : index+2
block_tgw=wpeek(file_data,index) : index+2
block_tgh=wpeek(file_data,index) : index+2
block_ccw=peek(file_data,index) : index+1
block_cch=peek(file_data,index) : index+1
block_tfci=peek(file_data,index) : index+1
block_tbci=peek(file_data,index) : index+1
block_size=0
block_ptd=""
repeat
block_bs=peek(file_data,index) : index+1
if block_bs=0x00 : break
memexpand block_ptd,block_size+block_bs
memcpy block_ptd,file_data,block_bs,block_size,index
block_size+block_bs
index+block_bs
loop
block_sptd=block_size // プレーンテキストデータのサイズ
; GIFのプレーンテキストデータ (block_ptd) の解析
bsave "dat\\PlainTextData_"+strf("%02d",block_nid)+".dat",block_ptd,block_sptd;
swbreak
case 0xFF // Application Extension
block_bs=peek(file_data,index) : index+1 // 必ず11
block_ai=""
part_size=8
memexpand block_ai,part_size
memcpy block_ai,file_data,part_size,0,index
index+part_size
block_aac=""
part_size=3
memexpand block_aac,part_size
memcpy block_aac,file_data,part_size,0,index
index+part_size
block_size=0
block_ad=""
repeat
block_bs=peek(file_data,index) : index+1
if block_bs=0x00 : break
memexpand block_ad,block_size+block_bs
memcpy block_ad,file_data,block_bs,block_size,index
block_size+block_bs
index+block_bs
loop
block_sad=block_size // アプリケーションデータのサイズ
; GIFのアプリケーションデータ (block_ad) の解析
bsave "dat\\ApplicationData_"+strf("%02d",block_nid)+".dat",block_ad,block_sad;
swbreak
swend
swbreak
swend
loop
おめでとうございます^^
何かに利用してみては如何でしょう。
ありがとうございます。
あ、でもイメージデータの解析ができてないので…。
それができたら利用しまくります。