2013-04-09 68 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