SWFの構造要約_SWF_ヘッダ - hsk/swfspec_ja GitHub Wiki

SWF ヘッダ

SWF ファイルは、次のようなヘッダから始まります。 データの型については 基本的なデータ型 をご覧ください。

フィールド タイプ 内容
Signature UI8 シグネチャバイト:
“F” => 圧縮されていない
“C” => 圧縮されている (SWF 6 以降のみ)
Signature UI8 シグネチャバイト: 常に “W”
Signature UI8 シグネチャバイト: 常に “S”
Version UI8 1 バイトのファイルバージョン (例: 0x06 => SWF 6)
FileLength UI32 バイト単位のファイルを全て含む長さ
FrameSize RECT twip 単位のフレームの大きさ
FrameRate UI16 8.8 固定小数点数形式のフレーム数/秒
FrameCount UI16 ファイルの全フレーム数

ヘッダは、3 バイトのシグネチャ 0x46, 0x57, 0x53 ("FWS") か、 0x43, 0x57, 0x53 ("CWS") で始まります。 FWS シグネチャは SWF ファイルが圧縮されていないことを、CWS は最初の 8 バイト以降 (FileLength フィールドの後) が ZLIB 標準によって圧縮されていることを意味します。ZLIB のデータフォーマットは RFC 1950 ~ 1952 で解説されています (下記リンク参照)。CWS は SWF 6 以降で使用することができます。

シグネチャの後に 1 バイトのバージョン番号が続きます。 バージョン番号は ASCII 文字ではなく、8 bit の数値で表します。例えば SWF 4 は、このバイトが ASCII 文字の "4" (0x34) ではなく、 0x04 になります。

FileLength フィールドは、ヘッダを含む SWF ファイルの全長を表します。 圧縮されていない SWF ファイル (FWS シグネチャ) の場合、 FileLength フィールドはファイルのサイズと全く同一になります。 圧縮された SWF ファイル (CWS シグネチャ) の場合、 FileLength フィールドは解凍後のファイルの全長を表すので、通常、ファイルのサイズと一致することはありません。

FrameSize フィールドでは、スクリーン上に表示される幅と高さを宣言します。 このフィールドは RECT 構造体で保存するので、指定する座標のサイズによって構造体の必要とするバイトサイズが変化します。FrameSize フィールドの Xmin, Ymin 値は常に 0 になります。Xmax, Ymax は、幅と高さを表します (RECT 型 参照)。

FrameRate はシステムに要求する秒間フレーム数を表します。 CPU 使用率が高く Flash Player の動作が遅くなっている時には、この値通りには動作しません。

FrameCount は SWF ファイルの全フレーム数を表します。

リンク

移動