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;;