Flash中的屏幕截图(sorta)

时间:2011-04-03 15:12:56

标签: flash actionscript

我正在寻找一种创建和显示多达200个舞台屏幕截图的方法。目前我在BitmapData对象中记录每个屏幕,然后播放所有屏幕。这种方法有效,但需要太多内存 - 会使某些浏览器崩溃。

解决此问题的最佳方法是什么?我可以创建.png,.flv电影或以某种方式压缩BitmapData吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

  • 将图像压缩到JPEG ByteArray并根据您将要执行的捕获次数,可用的分辨率和可用的存储空间来定义质量比(我不确定您是否可以知道,最后一个) - 我认为这是更好的方式之一

  • 为第一个制作完整尺寸,其余部分仅捕获更改和位置(请参阅FlashPlayer调试器功能“显示重绘区域”的工作原理)

  • 如果您使用Air应用程序,请将BitmapData保存在临时文件中

  • 如果可能,请让用户解锁大量的LocalSharedObject空间并在里面写入数据

此处,使用比例比例进行捕获的示例代码(例如:100x200 DispObj - > 50x100 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));