昨日はPSDファイルの読み込みをしていたので、今度はSWFファイルの読み込みを。
これはこれでいろいろ資料があるようなので参考にしたりします。
http://labs.gree.jp/blog/2010/08/631/
http://wiki.libspark.org/wiki/SWF/Format
http://d.hatena.ne.jp/FLIP_FLOP/20080929/1222685888
このあたりを参考に
今日一日かかってしまいましたがなんとかヘッダーの解析には成功。
PSDとは比較にならないくらい難しいです。
普通にバイトデータを読み込むだけならマシなのですが、どうもSWFファイルにはビットが可変するデータ型があるようでして、
これに合わせてビットレベルの操作ができなければいけません。
RECT型というやつがそれにあたり、
Nbits
Xmin
Xmax
Ymin
Ymax
という順番でデータが続くとのこと。
Nbitsは5bitでここにはデータサイズが入り、
Nbitsサイズ分のフィールドが下に4つ続き、
アライメントして次のバイトから次のパラメータが始まる、というような仕様になっているらしいが
実際のところ何バイトアライメントでやっているのか把握できてないのでちょっと怖い。
バイナリリーダーだけではバイト配列は取れますがビット操作はできない為、
とりあえずビットを2進数文字列に変換してからそれをビット指定で整数に変換する、というような仕組みを作ることに
明日からはまた仕事なので終電コースなら続きは難しいけどとりあえずヘッダーは取れたので
引き続きタグを取れるようにしてみたいところ・・・
可変ビットというのは初めてやるので若干戸惑いましたが、その辺はおそらくアプリ開発では使わないので
とりあえずはツール上でそれっぽくできればいいかなぁ・・・
ではでは
SWFファイルを解析するの巻
RE: SWFファイルを解析するの巻
ガラケーのパズルゲームの問題データとかでよく使いましたけどね。せんちゃ さんが書きました:可変ビットというのは初めてやるので若干戸惑いましたが、その辺はおそらくアプリ開発では使わないので
とりあえずはツール上でそれっぽくできればいいかなぁ・・・
最後に編集したユーザー ISLe on 2013年12月08日(日) 23:46 [ 編集 2 回目 ]
Re: SWFファイルを解析するの巻
ガラケーで使われるということはやっぱり容量節約の為、ということですよね。
ビットにランダムアクセスするとなると必要ないビットを消すためにビットシフトや~&演算とかを沢山使う感じなのでしょうか。
追記
落ち着いて考えてみると必要ビット分だけビットシフトしてORで格納していけばなんとかなるかなぁと思い
試してみたら普通にできたようです。
ビットにランダムアクセスするとなると必要ないビットを消すためにビットシフトや~&演算とかを沢山使う感じなのでしょうか。
追記
落ち着いて考えてみると必要ビット分だけビットシフトしてORで格納していけばなんとかなるかなぁと思い
試してみたら普通にできたようです。
最後に編集したユーザー せんちゃ on 2013年12月09日(月) 11:55 [ 編集 1 回目 ]