这是我的代码
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保存在设备中。
我的帮助表示赞赏。 感谢名单。
答案 0 :(得分:2)
问题是你试图让你把你的视觉表现“转换”成数据(ByteArray)。这需要时间,因为它正在检查每个像素(再次说是基本的)。
在你的情况下,你甚至会使用压缩,这会让事情变得更糟。
首先,在操作之前和之后使用getTimer
,这样你就可以检查实际需要多长时间。
第二 - 这是一个全高清位图,这是肯定的。当您知道压缩时间时,您可以尝试通过降低图像质量或将其缩小来优化它。
第三,也是最有可能工作的 - 你应该使这个操作异步。通常的编码是同步的,这意味着在此操作结束之前不会执行任何其他代码。因此,您可能希望将此操作拆分为块,并让其他代码也执行。你不想那个蹩脚的冻结吧?异步编码器每帧会对少量图像进行编码,经过一段时间后,整个图像就会准备就绪。
这里的缺点是它比通常的慢。我见过的几乎所有编码器都比内置和优化的编码器慢几次。我最后一次使用它,对于普通的高清图像,需要3到4秒,而内置它的工作时间为100毫秒。
但无论如何,它会在没有冻结的情况下完成你的工作。只需尝试一下,再次使用getTimer
检查时间。
以下是一些样本:
答案 1 :(得分:-1)
我在github上使用https://github.com/LeeBurrows/Async-Image-Encoders这个库 将BitmapData对象异步编码为图像文件格式。