【问题标题】:What are the technical, underlying reasons behind Robot().createScreenCapture() being so slow?Robot().createScreenCapture() 如此缓慢背后的技术和根本原因是什么?
【发布时间】:2013-02-05 02:29:38
【问题描述】:

我一直在尝试构建一个屏幕录像机来练习我萎缩的 Java 技能(尽管已经有太多了)。

但是,我遇到了 Robot 类速度慢得离谱的问题——即使在我的 i7 驱动机器上也可能在 15fps 左右,而在我的 macbook 上则是爬行 4-5fps。我已经用 Python 构建了一个工作记录器,并且通过使用 PIL 抓取快照至少能够达到可靠的 20-24fps。

所以,我很好奇,课程这么慢的技术原因是什么?

此外,其他屏幕录像机如何工作? Screencast-o-matic 是 Java,并且似乎表现良好。我假设有某种方式可以与底层操作系统连接,并将所有内容从缓冲区或其他东西中提取出来?我认为必须有一些非常快的方法来获取屏幕上正在绘制的内容的副本——毕竟,操作系统的速度足以在进行大量其他计算的同时多次绘制屏幕!似乎将一组颜色从一个地方复制到另一个地方应该是一种相对便宜的操作。

我决心不放弃!我只是不知道我需要知道什么才能真正深入了解如何构建合适的录音机。

【问题讨论】:

标签: java


【解决方案1】:

我不太确定。但仍然是一个很可能的原因。

操作系统: 操作系统已经绘制了屏幕。这是有道理的,它存储了图形,直到发生新的事情。可以轻松保存图形。

java机器人: 机器人在存储数据之前收集数据。屏幕截图使用方法。方法是getPixelColor()。它做了一个大循环来获取屏幕上的所有像素。在高清屏幕上该方法被调用921600次(1280*720),这需要时间加上它需要压缩成图像并保存。

【讨论】:

  • +1 我刚刚查看了 Robot、Writable Raster 和其他获取屏幕图像的类的源代码。
猜你喜欢
  • 2012-05-14
  • 2010-11-03
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多