2011-01-05 65 views
0

我需要將在AS2 swf中創建的BitmapData對象傳輸到AS3 swf。我正在使用gskinner的SWFBridge在兩部Flash動畫之間建立雙向通信。通過SWFBridge將ASmapf中的BitmapData對象傳輸到父AS3 swf

AS3電影加載完全獨立工作的AS2 swf,並允許用戶操縱影片剪輯並最終從他創建的作品中生成一個圖像。我需要AS3電影來接收這個圖像(bitmapData),做一些花哨的圖像處理的東西,AS2無法做到,併發送新的圖像回到AS2電影。

因此,這裏的代碼

AS2 SWF:

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:

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(),保存一切到一個數組然後將它傳遞給AS3會做到這一點,但它確實是一個表演豬。

此外,我不是允許將AS2 swf轉換爲AS3代碼。

有什麼建議嗎?

謝謝你!

+0

如何通過as2中的像素循環,使用uint填充單個數組並檢查是否可以發送這些數組。如果這樣,你可以將該陣列轉換爲向量。 使用setVector(http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer=10&filter_air=1.5#setVector ()) – 2011-01-05 15:46:11

+0

我認爲它可以工作,但使用getPixel32()在as2中循環像素大約需要3到4秒。我認爲這是太多時間,我需要更快的速度,因爲用戶需要儘快查看結果以執行其他任務。 – 2011-01-05 15:56:25

回答

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電影準備好/設置你需要的內容。

這個作品假設你想要在as3電影裏面顯示as2內容,這意味着你將會加載as2電影。如果沒有,請加載as2內容,但不要將其添加到顯示列表中,這意味着您將加載as2影片。否則,您可以嘗試使用服務器端語言(例如php)保存as2電影中的最終位圖,然後通過SWFBridge在as3電影中觸發一個函數,該函數將加載之前保存的圖像。

HTH

+0

是的!我認爲這可能是解決方案。我會試試看。非常感謝! – 2011-01-06 13:42:09

+0

它像一個魅力工作!非常感謝喬治! – 2011-01-10 09:00:55