我需要抓取一系列截图并将它们连接成电影 . 我正在尝试使用java Robot类来捕获屏幕 .
但是createScreenCapture()方法在我的机器上花费的时间超过1秒 . 我甚至无法获得1 fps . 有没有办法加快速度?或者还有其他API吗?
编辑:它正在分配缓冲的图像 .
BufferedImage image = robot.createScreenCapture(screen); //将屏幕截图保存为jpg
文件文件=新文件("images/screen" index ".jpg");
ImageIO.write(image,"jpg",file);指数;
将其写入jpg文件大约需要200毫秒,因为获取BufferedImage大约需要1400毫秒 .
2 回答
我建议使用C或C,它可以更直接地访问硬件 .
如果您希望绝对最大性能达到驱动程序级别,只需将数据直接从视频卡中取出即可 . 很难找到这样的驱动程序,因为它可以用来轻松地击败任何复制保护,因为它会在数据进入屏幕时抓取数据 .
但是如果你需要坚持使用Java和Robot,你确定它只是这一个函数调用需要这么长时间吗?它不是分配BufferedImage或其他东西?
尝试尝试不同的屏幕设置 . 颜色深度会影响它,因为AWT必须将所有内容转换为常见的栅格格式 .
我的电脑上的一些示例时间:
我的适配器不能做24bpp或64bpp所以我无法测试那些深度,但我猜他们需要更多的CPU周期来转换 .