2011-04-03 52 views
0

我正在尋找一種方法來創建和顯示最多200個舞臺屏幕截圖。目前,我將每個屏幕截圖記錄在一個BitmapData對象中,然後播放所有這些對象。這種方法可行,但需要太多內存 - 會導致一些瀏覽器崩潰。Flash中的屏幕截圖(sorta)

解決此問題的最佳方法是什麼?我可以創建.png的,.flv電影或以某種方式壓縮BitmapData嗎?

謝謝!

+0

什麼是您拍攝的內容?難道你不能在一個更「矢量」模式下輕鬆地重建它嗎? – Kodiak 2011-04-03 15:41:38

+0

即使您可以將它們轉換爲PNG,您仍然試圖顯示具有非常大的內存佔用空間的數據。也許只能一次加載一些(分頁),或者甚至重新思考,如果Flash是正確的工具... – jpea 2011-04-03 19:34:14

+0

無法轉換爲矢量,但認爲編譯FLV可能是最佳選擇。幾個例子http://www.undefinedcreations.com/Blog/?p=9和http://www.zeropointnine.com/blog/simpleflvwriteras-as3-class-to-create-flvs/。 – 2011-04-03 20:14:32

回答

2

有多個解決方案,但你可以嘗試一個OT這(和組合):

  • 做一個較低的分辨率抓屏(縮放,見下)

  • 將您的BitmapData成ByteArray(通過BitmapData.getPixels())和調用ByteArray.compress()(無損壓縮)

  • 將圖像壓縮到JPEG ByteArray,並定義取決於捕獲次數的質量比率,reso它的存儲空間和可用的內存空間(我不確定你可以知道,這是最後一個) - 我認爲這是更好的方法之一

  • 爲第一個和其餘的僅捕獲一個完整的大小變化和位置(參見如何FlashPlayer的調試功能「顯示重繪區域」工作)

  • ,如果你對AIR應用程序的工作,節省的BitmapData在臨時文件

  • ,如果有可能,讓用戶解鎖到LocalSharedObject的大量空間並將您的數據寫入內部

這裏,樣本代碼,以使一個規模比捕獲(例如:100×200 DispObj - > 50×的BitmapData)

var displayObject:DisplayObject; 
var scale:Number = 0.5; 
var bounds:Rectangle = displayObject.getBounds(displayObject); 
var bitmapData:BitmapData = new BitmapData(uint((bounds.width + 0.5) * scale), uint((bounds.height + 0.5) * scale), true, 0); 
bitmapData.draw(displayObject, new Matrix(scale, 0, 0, scale, -bounds.x * scale, -bounds.y * scale)); 
+0

謝謝@mems!我會嘗試這個解決方案,會讓你知道它是如何工作的。 – 2011-04-06 22:38:46