2013-04-09 63 views
0

与使用的BitmapData我有一个ActionScript 2的SWF,我想导出到PNG,然而,它加载为的AVM1Movie在AS3中被证明是相当麻烦的事实。缩放的AVM1Movie在AS3

当你加载只是正常的独立Flash Player AS2 SWF,你可以右键点击 - >放大,并自其在尺寸重新绘制矢量数据很好地扩展。但是,当我试图让Loader对象(包含所装载的AS2 SWF)规模,每当我把它绘制到BitmapData对象,我只是得到与它周围的空白处SWF的原始尺寸,而不是具有SWF扩展到新的层面。

我的代码如下所示:

var theFile:File = File(event.target); 

var dis:DisplayObject = this.mLoader.content; 
dis.width *=2; 
dis.height *=2; 

var bd:BitmapData = new BitmapData(dis.width, dis.height, true, 0x00000000); 
trace("display object height and width is " + dis.width + " " + dis.height); 
bd.draw(dis); 

var stream:FileStream = new FileStream(); 
stream.open(theFile, FileMode.WRITE); 
stream.writeBytes(PNGEncoder.encode(bd)); // needs as3corelib 
stream.close(); 

Alert.show("saved to " + theFile.nativePath); 

但是当我打开生成的PNG文件,我得到这个(红色显示透明背景):

resulting image

有什么这样做的方式是,当我将as2 swf绘制到BitmapData时,它会像在Flash Player中一样缩放它?

回答

1

我相信你应该能够简单地使用,而不是试图将多个高度和宽度值scaleX和scaleY属性。

var dis:DisplayObject = this.mLoader.content; 
//dis.width *=2; 
dis.scaleX = 2; 
//dis.height *=2; 
dis.scaleY = 2; 

编辑 另外,因为上面是不适合您尝试使用矩阵参数的绘图调用。

var mat:Matrix = new Matrix(); 
mat.scale(2,2); 
bd.draw(dis,mat); 
+0

这似乎是它会工作(因为当你改变的scaleX或的scaleY,它会自动调整高度/宽度),但它确实在那里调整的背景,但我想调整实际的东西还是一样的东西相同的比例=/ – mgrandi 2013-04-10 18:14:33

+0

是的,这就是答案。在与为BitmapData.draw()的文件,它指出,变换不使用的DisplayObject源的,因此通过设置宽度/高度为2倍,它被修改变换的矩阵具有SY和SX是“2” ,但它没有使用它。使用源显示对象的transform.matrix调用绘图,或者您可以创建一个像shaunhusain那样的新矩阵。 – mgrandi 2013-04-11 09:03:14