で作品を拝見し、元がペーパーアニメでAVIなFlashも割と現実的な容量で、しかも見るに耐える画質を得られることが分かりました。
そこでTMS2AVIでSWFを出力しようと思いちょっと調査してみました。
ちなみにSWFというのは、macromediaのFlashの使う映像フォーマットです。
Mingという出力用ライブラリがある模様。
・ファイル内のinlineを__inlineに置換 (VCでinlineが使えるのはC++のみ) ・shape_cubic.cのインクルードファイルに"libming.h"を追加。します。
>nmake -f libming.makを実行します。型が違う旨の警告が山程出ますが、一応libming.libが作成される筈です。
// void addString(const char *string, float *advance=NULL)
// { SWFText_addString(this->text, string, advance); }
void addString(const char *string, int *advance=NULL)
{ SWFText_addString(this->text, string, advance); }
に修正。floatをintに修正したけれど、本当にこれで良いのかは不明。調査が必要なんだけど、
多分tms2aviではこの関数使わないので放置。
そのうち本家が修正するでしょう。>nmake -f test.mak出来たtest.exeをコマンドプロンプトから実行すると、何だか謎の化け化け文字列が出ます。これは添付されてるサンプルがサーバサイドでの利用を前提に標準出力にswfを吐くためです。
movie->output(); を movie->save( "test.swf");にすると、test.swfというswfファイルが作られるようになります。ちなみにIEで表示すると白地に黒い四角が描かれるだけです。ピクリとも動きません。
ming 0.2a では、jpeg Bitmap を add するとき、
fclose のタイミングによっては SWF の出力に失敗するみたいです。
失敗する例:
#include
main()
{
SWFMovie m;
SWFBitmap b;
FILE *fp = NULL;
fp = fopen("test.jpg", "rb");
m = newSWFMovie();
b = newSWFJpegBitmap(fp);
SWFMovie_add(m, b);
fclose(fp); /* <-- ここで close すると save できない */
SWFMovie_save(m, "test.swf");
return 0;
}
fclose を save の後で実行すれば大丈夫です。僕はかなり悩みました。
http://www.opaque.net/pipermail/ming-fun/2001-January/000068.html
を見つけて、ようやく気がつきました。
池上です。
同様に alpha mask のために開く mask file も fclose すると
SWFMovie_save のときに Bus Error で落ちるようです。
Ming のソースを眺めましたが、
SWFInput が file pointer を握っているのが前提になっているみたいなので、
2, 3 行直すだけでは回避できそうにないです…
むぅ。まずいです。100フレーム出力するならファイルを100個開いたまま?1000フレームだと同時に1000?駄目じゃん。
という訳で、Mingはイマイチ使えない事が分かった。
だが、まだまだその他重要なFlash関連技術(動的生成、SWF等)があるので何れまたトライしてみようと思う。