我需要将在AS2 swf中创建的BitmapData对象传输到AS3 swf。我正在使用gskinner的SWFBridge在两部Flash电影之间建立双向通信。
AS3电影加载AS2 swf,它完全独立工作,让用户操作MovieClip,最后根据他创建的合成生成图像。我需要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 :(得分:0)
似乎as2电影为图像添加了一些装饰/动画片段。 之后,您绘制它并发送尝试将其发送到as3。
由于所有像素的循环很慢,正如你所提到的,我想从as3电影中绘制as2内容会更快。
e.g。
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