frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

swf。

今日もお仕事関連のお勉強。

swfファイルをバイナリエディタで見て

何処に変数が入っているか確認。

てな訳で、とりあえず、

Flash で1フレーム目に「var test='ABCDEFG';」と書いて

swfファイルに保存したものを、バイナリエディタで見てみる。

...って、ただ眺めたんじゃ、そりゃ何もわからないので

Yoyaさんのサイトと、

そこから辿れる「Alexis' SWF Reference」を参考に、勉強させていただく。

ありがたやーm(_ _)m

[offset]: +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF

----------------------------------------------------------------------------

00000000: 46 57 53 07 38 00 00 00 78 00 05 5F 00 00 0F A0 FWS.8...x.._...?

00000010: 00 00 0C 01 00 43 02 FF FF FF 3F 03 14 00 00 00 .....C.????.....

00000020: 96 0F 00 00 74 65 73 74 00 00 41 42 43 44 45 46 ・..test..ABCDEF

00000030: 47 00 3C 00 40 00 00 00 G.<.@...

頭3byte「46 57 53」は「FWS」で、ファイルの種類を指し

次の1byte「07」はバージョンが 7 である事を示し、

次の4byte「38 00 00 00」は、「0x00000038」で、ファイル容量 56byte である事を指す。

次の「78 (0111 1000)」は、頭5bit「01111」が、その後に続くbit を分割する単位を示し、

つまり、15bit 毎に区切ってみていかないとアカン、と。

するってーと、「78 00 05 5F 00 00 0F A0 00 00 0C 01...」から、

頭5bit取った残りを、15bit毎で区切る、と。

xmin 「000 0000 0000 0000」

xmax 「0101 0101 1111 000」

ymin 「0 0000 0000 0000 00」

ymax 「00 1111 1010 0000 0」

結果、xmin=0、xmax=11000、ymin=0、ymax=8000 となって、

これを 20 で割った数が pixel になるそうだから、えーっと、

xmin=0、xmax=550pixels、ymin=0、ymax=400pixels なので。

つまり、横幅(x)が、550pixels、縦幅(y)が、400pixels だと。

おぉ、Flashで作ったファイルの設定と同じだー。

それから、レート(unsigned short)が続くんで、16bit を確保したいんだけど

前述の ymax で 00(0000 0000)のうち、頭1bitだけ使ってるのが気になる。

これ、残りは 0 で埋めた感じなのかな?

とりあえず、Flashでファイル作った時の設定は 12fps にしてあるので

「00 0C」(0x0C00)は、実数を「0C」、コンマ以下を「00」と見なせば

12.0 となって、正解かも。

続いて、フレーム数が「02 00」(0x0002 )だから、2フレームで正解。

で、ここまでが、ファイルヘッダー。

ここから先が、SWFタグ。

頭2byteは「43 02」(0x0243=1001 000011)は、

後ろ6bitが値を示している部分の長さなので、

9番SetBackgroundColorで、長さは3byte、

だから、続く3byte「FF FF FF」が背景色(白)を指している、と。

続く2byteは「3F 03」(0x033F)は、12番DoAction、

長さが0x3Fで、これは特別で、続く4byteが長さになるので

「14 00 00 00」が長さ。んあ?すんごく長いような(汗)

うーん、この辺りは、もっとちゃんと時間かけて見ないとダメですね。