2014-05-23 42 views
0

這裏是我的代碼節約影片剪輯需要較長的時間在AS3

var bitmapData:BitmapData = new BitmapData(1080,1920); 
bitmapData.draw(zoomall_mc); 
trace("after draw"); 

var jpgEncoder:JPGEncoder = new JPGEncoder(80); 
var byteArray:ByteArray = jpgEncoder.encode(bitmapData); 
trace("in save 2"); 

var fileReference: FileReference = new FileReference(); 
fileReference.save(byteArray, "imageno.jpg"); 
trace("after save"); 

這個代碼需要很長的時間之間的「平局之後」和「節省2」 執行,使我的應用程序沒有響應的那個時候。 我不知道爲什麼會發生這種情況。

是否有任何其他方式來保存設備中的動畫片段。

你的幫助表示讚賞。 thanx。

+2

對ByteArray進行編碼是一項冗長的操作。 /線程 – Vesper

+1

特別是在使用AS實現時。 [**'BitmapData.encode()'**](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#encode())應該更快,但仍然[**阻止**](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html)... – ndm

回答

2

問題是,你試圖讓我們說它將你的視覺表示'轉換'爲數據(ByteArray)。這需要時間,因爲它正在檢查每個像素(再次表示基本)。

而在你的情況下,你甚至會應用壓縮,這會讓事情變得更糟。

首先,在操作之前和之後使用getTimer,以便您可以檢查實際需要多少時間。

其次 - 這是一個全高清位圖,這是肯定的。當您知道壓縮時間時,您可以嘗試通過降低圖像質量或縮小圖像來優化壓縮時間。

三,最有可能的工作 - 你應該使這個操作異步。通常的編碼是同步的,這意味着除非此操作結束,否則不會執行其他代碼。所以你會想將這個操作分成塊並讓其他代碼也執行。你不想要那種蹩腳的冰凍,對吧?異步編碼器每幀將對少量圖像進行編碼,並且在一段時間後,整個圖像將準備就緒。

這裏的缺點是它比平時慢。幾乎所有我見過的編碼器都比內置和優化的編碼器慢幾次。上次我使用它時,對於普通的高清圖像,它花費了3到4秒,而內置的功能卻是100ms。

但無論如何,它會做你的工作沒有凍結。只需試一試,然後用getTimer再次檢查時間。

這裏有幾樣: