Flash中的屏幕捕获(排序)

Flash中的屏幕捕获(排序),flash,actionscript,Flash,Actionscript,我正在寻找一种方法来创建和显示多达200个舞台屏幕截图。目前,我在BitmapData对象中记录每个屏幕快照,然后播放所有屏幕快照。这种方法可以工作,但是占用了太多的内存,导致一些浏览器崩溃 解决这个问题的最佳方法是什么?我可以创建.png的.flv电影还是压缩位图数据 谢谢 有多个解决方案,但您可以尝试其中一个(并组合): 制作较低分辨率的屏幕截图(缩放,见下文) 将BitmapData转换为ByteArray(通过BitmapData.getPixels())并调用ByteArray.co

我正在寻找一种方法来创建和显示多达200个舞台屏幕截图。目前,我在BitmapData对象中记录每个屏幕快照,然后播放所有屏幕快照。这种方法可以工作,但是占用了太多的内存,导致一些浏览器崩溃

解决这个问题的最佳方法是什么?我可以创建.png的.flv电影还是压缩位图数据


谢谢

有多个解决方案,但您可以尝试其中一个(并组合):

  • 制作较低分辨率的屏幕截图(缩放,见下文)

  • 将BitmapData转换为ByteArray(通过BitmapData.getPixels())并调用ByteArray.compress()(无损压缩)

  • 将图像压缩到并定义质量比,这取决于您将要执行的捕获次数、分辨率和可用的内存空间(我不确定您是否知道,这是最后一个)-我认为这是一种更好的方法

  • 为第一个设置一个完整的大小,其余的只捕获更改和位置(请参见FlashPlayer调试器功能“显示重画区域”的工作原理)

  • 如果您正在使用Air应用程序,请将位图数据保存在临时文件中

  • 如果可能,请用户解锁LocalSharedObject的大量空间,并将数据写入其中

这里是一个使用比例进行捕获的示例代码(例如:100x200 DispObj->50x100 BitmapData)


你拍摄的内容是什么?你不能用一种更“矢量”的模式轻松地重建它吗?即使你能将它们转换成png,你仍然试图显示内存占用非常大的数据。也许一次只加载一部分(分页),或者甚至重新考虑Flash是否适合此工作……无法转换为vector,但认为编译FLV可能是最佳选择。几个例子和例子。谢谢@mems!我会尝试这个解决方案,让你知道它是如何工作的。
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));