swflib

swflibのソースをゴチャゴチャいじりまわして、画像とか出力できるようになりました。
使ってみた感じは、swfの仕様と見比べながら使えば使えるけど、
そうでないと困るだろうなぁって感じです。


なーんも出さないout.swfを生成

open Swf
open SwfParser


let tag ?(ext=false) d = {
	tid = 0;
	textended = ext;
	tdata = d;
};;

let w = 640;;(* 幅 *)
let h = 480;;(* 高さ *)
let fps = 40.0;;(*フレームレート*)
let out = "out.swf";;(*出力ファイル名*)
let bgcolor = ref 0xffffff;;(*背景色*)

(* ヘッダ情報 *)
let header = {
		h_version = 8;(* プレーヤーのバージョン flash player 8 に対応してみてる *)
		h_size = {(* フラッシュデータの大きさ *)
			rect_nbits = if (max w h) >= 820 then 16 else 15;
			left = 0;
			top = 0;
			right = w * 20;
			bottom = h * 20;
		};
		h_frame_count = 1;
		h_fps = to_float16 fps;(* fps *)
		h_compressed = false; (* 圧縮swf形式のCWS: true 非圧縮のswf FWS: false *)
	};;

(* データリスト *)
let data = [
	tag (TSetBgColor { cr = 0xFF; cg =  0xFF; cb =  0xFF });(* 背景色設定 *)
	tag (TShowFrame)];;(* 1フレーム表示 *)

SwfParser.init SwfZip.inflate SwfZip.deflate;;(* swflibの初期化 *)
Swf.warnings := true;;(* warningの設定 *)
let ch = IO.output_channel (open_out_bin out);; (* ファイルオープン *)
Swf.write ch (header, data);;(* swf書き出し *)
IO.close_out ch;(* ファイルクローズ *)

t.pngを読み込んで、スプライトとして登録。
これで出来たout.swfにmtascでアクションスクリプトを組み込んで使うとよろし。

open Swf
open SwfParser
open SwfPic
open SwfZip

(* タグ生成 *)
let tag ?(ext=false) d = {
	tid = 0;
	textended = ext;
	tdata = d;
	}

(* 領域データ生成 *)
let bounds x y w h = {
		rect_nbits = if (max w h) >= 820 then 16 else 15;
		left = x;
		top = y;
		right = w * 20;
		bottom = h * 20;
	}

let w = 640
let h = 480
let fps = 40.0
let out = "out.swf"
let bgcolor = ref 0xffffff


let header = {
		h_version = 8;
		h_size = bounds 0 0 w h;
		h_frame_count = 1;
		h_fps = to_float16 fps;
		h_compressed = false;
	}
;;

(* 画像ロード *)
let pic = SwfPic.load_picture "t.png" 1;;

let data = [
	tag (TSetBgColor { cr = 0xFF; cg =  0xFF; cb =  0xFF });]

	(* 画像をスプライトとして読み込み *)
	@
	SwfPic.make_clip "t.png" [pic] 2
	@ [
	tag (TShowFrame)];;

SwfParser.init SwfZip.inflate SwfZip.deflate;;
Swf.warnings := true;;
let ch = IO.output_channel (open_out_bin out);;
Swf.write ch (header, data);;
IO.close_out ch;;