В этой статье мы вместе с вами рассмотрим, как в Java сделать снимок экрана и затем сохранить скриншот в файл изображения. Для этого будем использовать Java API.

Но для чего может понадобиться сделать скриншот экрана? Вариантов здесь предостаточно. Например, вы разрабатываете специальный софт, где производится работа с графикой, либо это просто обычная скриншотилка с выделением области экрана и последующим сохранением изображения. 

Кроме того, создание скриншотов возможно использовать для тестирования программы. Например, в том же Google Chrome при отправке бага в службу поддержки предлагается сделать скриншот экрана. Это позволяет облегчить жизнь тестировщикам, предоставив им возможность создавать описательные скриншоты, которые в некоторых случаях могут быть напрямую прикреплены к сообщениям об ошибках пользователями программы. Такие скриншоты могут служить источником информации о состоянии программы или приложения.

С помощью специального класса и методов, вы сможете сделать скриншот на java:

BufferedImage createScreenCapture(Rectangle screenRect)

А затем произвести запись в файл.

boolean write(RenderedImage im, String formatName, File output)

Создание скриншота всего экрана

Сделать скриншот на java достаточно просто. Чтобы сохранить снимок всего экрана, необходимо сначала получить размер экрана. После чего вы с легкостью сможете сделать скриншот и сохранить его в файл:
 

Robot robot = new Rоbot();
String format = "png";
String name = "screenshot_name." + format;

Toolkit toolkit = Toolkit.getDefaultToolkit();
Rectangle rectagle = new Reсtangle(toolkit.getScreenSize());
BufferedImage image = robot.createScreenCapture(rectagle);

ImageIO.write(image, format, new File(name));

Файл изображения ( screenshot_name.png ) хранится в каталоге программы.
 

Создание скриншота выделенной области экрана

Для сохранения части экрана необходимо указать область, которую требуется сохранить в изображение. Затем, как и аналогично при сохранении всего экрана, использовать тот же код:

Robot robot = new Rоbot();
String format = "png";
String name = "screenshot_name." + format;

Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension size = toolkit.getScreenSize();
Reсtangle rectagle = new Rectangle(0, 0, size.width / 2, size.height / 2);
BufferedImage image = robot.createScreenCapture(rectagle);

ImageIO.write(image, format, new File(name));

Создание скриншота и его сохранение в изображение выполнено. Создание скриншота и его сохранение в изображение выполнено. В данном примере используется класс java.awt.Robot который производит получение пикселей экрана. В этом классе существует метод createScreenCapture возвращающий изображение в качестве BufferedImage объекта. Именно этот объект после сохраняется в виде файла изображения. Возможно использовать сохранение изображений в таких форматах, как png, jpeg, jpg и пр. При помощи класса Toolkit вы можете получить размер экрана, чтобы затем использовать эти размеры для создание скриншота выделенной области. 

Скриншоты в основном используются для анализа ошибок в программе. Они помогают понять, работает ли приложение в соответствии с требованиями пользователя или нет. Иногда, невозможно логировать те или иные ошибки в программе, особенно когда это касается ошибок в визуальном отображении программы, в ее интерфейсе. Сам программа может работать правильно, но при этом отображение каких-то ее отдельных частей, например, кнопок или текста, может быть неправильным. Снимок экрана помогает отслеживать неправильность этих данных и затем устранять.