2011-01-05 8 views
0

AS2 swfで作成したBitmapDataオブジェクトをAS3 swfに転送する必要があります。私はgskinnerのSWFBridgeを使って、両方のフラッシュムービー間の双方向通信を確立しています。BitmapDataオブジェクトをAS2 swfからSWFBridge経由で親AS3 swfに転送

AS3ムービーは完全にスタンドアロンで動作するAS2 swfをロードし、ユーザーがムービークリップを操作し、最終的に彼が作成したコンポジションからイメージを生成できるようにします。私はこのイメージ(bitmapData)を受け取るためにAS3ムービーを必要とし、AS2はいくつかの素晴らしいイメージ処理を行い、AS2ムービーに新しいイメージを送り返すことはできません。配列にすべてを保存し、

function imageTransfer(bitmapData:BitmapData, title:String):void 
{ 
    var bmp:Bitmap = new Bitmap(bitmapData); 
    this.addChild(bmp); 
    trace(title); // --> returns the right title 
    trace(bitmapData); // --> returns null 
} 

私はcopyPixel32(のようなものを使用してだと思う):

var userCompo_mc:MovieClip = container.createEmptyMovieClip("userCompo_mc",10); 
var image:BitmapData = new BitmapData(userCompo_mc._width, userCompo_mc._height); 
finalCompo.attachBitmap(image); // Just to make sure the final bitmap is right 
image.draw(userCompo_mc, compo.title); 

//Send the image to the AS3 movie 
sb1.send("imageTransfer",image); 

AS3のSWF:だからここ

はコード

AS2のswfファイルですそしてそれをAS3に渡すことはそのトリックを行いますが、それは本当にパフォーマンスの豚です。

また、私はではありません AS2 swfをAS3コードに変換することが許可されていません。

提案がありますか?

ありがとう!

+0

as2のピクセルをループし、単一の配列にuintsを埋め込み、それらを送信できるかどうかを確認する方法はありますか。それがうまくいけば、その配列をVectorにキャストすることができます。 をas3に設定し、setVector(http://help.adobe.com/ja_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer=10&filter_air=1.5#setVector)を使用してビットマップデータを色付けします。 ()) –

+0

私はそれが動作すると思うが、getPixel32()を使ってas2のピクセルをループするには約3〜4秒かかります。時間がかかりすぎると思っています。ユーザーは他のタスクを進めるためにできるだけ早く結果を見なければならないので、何かがより速く必要になります。 –

答えて

0

as2のムービーが画像にデコレーション/ムービークリップを追加しているようです。 その後、それを描画してas3に送信しようとします。

言い換えれば、すべてのピクセルがゆっくりとループしているので、as3ムービーからas2コンテンツを描画する方が速いと思います。

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded); 
loader.load(new URLRequest('yourAS2Movie.swf'),new LoaderContext(true)); 

function loaded(event:Event):void{ 
    var as2Clip:AVM1Movie = AVM1Movie(loader.content); 
    var bd:BitmapData = new BitmapData(as2Clip.width,as2Clip.height,false,0); 
    bd.draw(as2Clip); 
    addChild(new Bitmap(bd)); 
} 

このスニペットでは、as2コンテンツは読み込み時に描画されます。あなたのケースでは、SWFBridge経由でas2コンテンツを描画する関数を呼び出す、または呼び出します。as2ムービーが必要なものの準備が整った後です。

これは、as2ムービーをas3ムービーの中に表示することを前提としています。つまり、とにかくas2ムービーをロードします。そうでない場合は、as2コンテンツをロードするか、表示リストに追加しないでください。つまり、as2ムービーをロードします。それ以外の場合は、サーバ側の言語(たとえばPHPなど)を使用してas2ムービーから最終ビットマップを保存し、SWFBridge経由で以前保存したイメージをロードするas3ムービーの関数をトリガーできます。

HTH

+0

はい!私はこれが解決策になると思う。私はそれを試してみます。どうもありがとう! –

+0

それは魅力のように働いた! Georgeさんありがとう! –

関連する問題