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

发布于 2024-11-29 01:45:59 字数 442 浏览 1 评论 0原文

在 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资源。如果处理速度慢一些,但 CPU 利用率不超过 60%,我也没关系。

谢谢。

What's the most resources efficient way to take a screenshot of display object in as3?

This is the code I am currently using:

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);
    }

But it takes too much CPU power. I am okay if it will be processed more slowly, but without CPU utilization up to 60%.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

攒眉千度 2024-12-06 01:45:59

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

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

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

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

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

It's JPEG encoding that takes most of the time, and not capturing of a displayobject to a BitmapData.

To achieve better performance (sacrificing its running time) you have to use some optimized version of standard JPEGEncoder class or/and its asynchronous version.

If you are not satisfied with the above, try googling for similar solutions: some guys out there have already solved the problem.

Note: you can also implement a couple of optimizations.

  • You don't need to create new Matrix instance every time. You can use one instance, calling Matrix.identity() before drawing. This will be of use if you perform this operation many times during one application session.
  • You don't need to create new JPEGEncoder instance every time. You can create one and hold it in some private static field (for example, create it on first call to img()).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文