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