Java Robot createScreenCapture performance

javaperformanceswing

I need to grab a series of screenshots and concatenate them into a movie. I'm trying to use the java Robot class to capture the screen.

But the createScreenCapture() method takes more than 1 second on my machine. I can't even get 1 fps. Is there a way to speed it up? Or is there any other API?

Edit: It is allocating a buffered image.

BufferedImage image = robot.createScreenCapture(screen);
//Save the screenshot as a jpg
File file = new File("images/screen"+ index + ".jpg");
ImageIO.write(image, "jpg", file);
index++;

Writing it to the jpg file takes about 200 ms where as getting BufferedImage takes about 1400ms.

Best Answer

I'd suggest going with C or C++ for this, it has much more direct access to the hardware.

If you want the absolute maximum performance go to the driver level and just take the data straight off the video card. It's difficult to find a driver like this because it could be used to easily defeat any copy protection since it grabs the data as it's going to the screen.

But if you need to stick with Java and Robot, are you sure it's just this one function call which is taking so long? It's not allocating a BufferedImage or something else?