我需要抓取一系列截图并将它们连接成电影。我正在尝试使用java Robot类捕获屏幕。
但是createScreenCapture()方法在我的机器上花费的时间超过1秒。我甚至无法获得1 fps。有没有办法加快速度?或者还有其他API吗?
编辑:它正在分配缓冲的图像。
BufferedImage image = robot.createScreenCapture(screen);
//将截图保存为jpg
文件文件=新文件(“图像/屏幕”+索引+“.jpg”);
ImageIO.write(image,“jpg”,file);
索引++;
将其写入jpg文件大约需要200毫秒,因为获取BufferedImage大约需要1400毫秒。
答案 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周期来转换。