0

我有一个actionscript 2 SWF,我想导出到PNG,但是事实证明它在as3 中作为AVM1Movie 加载是相当麻烦的。

当您仅在普通的独立 Flash 播放器中加载 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 文件时,我得到了这个(红色显示透明背景):

结果图像

有什么办法可以让我将 as2 swf 绘制到 BitmapData 时,它会像在 Flash 播放器中一样缩放它?

4

1 回答 1

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);
于 2013-04-09T03:07:17.967 回答