首页 文章

Java Robot createScreenCapture性能

提问于
浏览
11

我需要抓取一系列截图并将它们连接成电影 . 我正在尝试使用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 回答

  • 1

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

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

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

  • 2

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

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

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

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

相关问题