在as3中保存movieclip需要更长的时间

时间:2014-05-23 07:09:10

标签: android actionscript-3 air

这是我的代码

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”之间执行 并使我的应用程序没有响应那个时间。 我不知道为什么会这样。

还有其他方法可以将movieclip保存在设备中。

我的帮助表示赞赏。 感谢名单。

2 个答案:

答案 0 :(得分:2)

问题是你试图让你把你的视觉表现“转换”成数据(ByteArray)。这需要时间,因为它正在检查每个像素(再次说是基本的)。

在你的情况下,你甚至会使用压缩,这会让事情变得更糟。

首先,在操作之前和之后使用getTimer,这样你就可以检查实际需要多长时间。

第二 - 这是一个全高清位图,这是肯定的。当您知道压缩时间时,您可以尝试通过降低图像质量或将其缩小来优化它。

第三,也是最有可能工作的 - 你应该使这个操作异步。通常的编码是同步的,这意味着在此操作结束之前不会执行任何其他代码。因此,您可能希望将此操作拆分为块,并让其他代码也执行。你不想那个蹩脚的冻结吧?异步编码器每帧会对少量图像进行编码,经过一段时间后,整个图像就会准备就绪。

这里的缺点是它比通常的慢。我见过的几乎所有编码器都比内置和优化的编码器慢几次。我最后一次使用它,对于普通的高清图像,需要3到4秒,而内置它的工作时间为100毫秒。

但无论如何,它会在没有冻结的情况下完成你的工作。只需尝试一下,再次使用getTimer检查时间。

以下是一些样本:

答案 1 :(得分:-1)

我在github上使用https://github.com/LeeBurrows/Async-Image-Encoders这个库 将BitmapData对象异步编码为图像文件格式。