Java Robot createScreenCapture性能

时间:2009-03-14 15:25:49

标签: java performance swing

我需要抓取一系列截图并将它们连接成电影。我正在尝试使用java Robot类捕获屏幕。

但是createScreenCapture()方法在我的机器上花费的时间超过1秒。我甚至无法获得1 fps。有没有办法加快速度?或者还有其他API吗?

编辑:它正在分配缓冲的图像。

BufferedImage image = robot.createScreenCapture(screen); //将截图保存为jpg
文件文件=新文件(“图像/屏幕”+索引+“.jpg”);
ImageIO.write(image,“jpg”,file); 索引++;

将其写入jpg文件大约需要200毫秒,因为获取BufferedImage大约需要1400毫秒。

2 个答案:

答案 0 :(得分:2)

我建议使用C或C ++,它可以更直接地访问硬件。

如果您希望绝对最大性能达到驱动程序级别,只需将数据直接从视频卡中取出即可。很难找到这样的驱动程序,因为它可以用来轻松击败任何复制保护,因为它会在数据进入屏幕时抓取数据。

但是如果你需要坚持使用Java和Robot,你确定这只是一个函数调用需要这么长时间吗?它没有分配BufferedImage或其他东西吗?

答案 1 :(得分:2)

尝试尝试不同的屏幕设置。颜色深度会影响它,因为AWT必须将所有内容转换为常见的栅格格式。

我的电脑的一些示例时间:

 Resolution | Depth | Time taken 
------------+-------+------------
 1280x1024  | 32    | 215ms
 1280x1024  | 16    | 155ms
 1600x900   | 32    | 235ms

我的适配器不能做24bpp或64bpp所以我无法测试这些深度,但我猜他们需要更多的CPU周期来转换。