什么是在as3中截取显示对象的屏幕截图最有效的方法

时间:2011-08-10 05:14:57

标签: actionscript-3 cpu displayobject

在as3中截取显示对象的屏幕截图最有效的方法是什么?

这是我目前使用的代码:

public static function img(o:DisplayObject,width:int,height:int):ByteArray
    {
        var b:BitmapData = new BitmapData(width,height,true,0x000000);
        b.draw(o,new Matrix(o.width/width,0,0,o.height/height),null,null,null,true);
        return new JPGEncoder(35).encode(b);
    }

但它需要太多的CPU能力。如果处理速度更慢,但没有高达60%的CPU使用率,我没关系。

感谢。

1 个答案:

答案 0 :(得分:1)

JPEG编码占用大部分时间,而不是将显示对象捕获到BitmapData。

为了获得更好的性能(牺牲其运行时间),您必须使用标准JPEGEncoder类或/及其异步版本的某些优化版本。

如果您对上述内容不满意,请尝试谷歌搜索类似的解决方案:那里的一些人已经解决了这个问题。

注意:您还可以实施一些优化。

  • 您不需要每次都创建新的Matrix实例。您可以使用一个实例,在绘制之前调用Matrix.identity()。如果您在一个应用程序会话期间多次执行此操作,这将是有用的。
  • 您不需要每次都创建新的JPEGEncoder实例。您可以创建一个并将其保存在某个私有静态字段中(例如,在第一次调用img()时创建它)。