Вопрос-ответ

Is there a way to take a screenshot using Java and save it to some sort of image?

Есть ли способ сделать снимок экрана с помощью Java и сохранить его в виде какого-либо изображения?

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

Переведено автоматически
Ответ 1

Хотите верьте, хотите нет, но вы действительно можете использовать java.awt.Robot для "создания изображения, содержащего пиксели, считываемые с экрана". Затем вы можете записать это изображение в файл на диске.

Я только что попробовал, и все это заканчивается следующим образом:

Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = new Robot().createScreenCapture(screenRect);
ImageIO.write(capture, "bmp", new File(args[0]));

ПРИМЕЧАНИЕ: Это позволит захватить только основной монитор. Смотрите GraphicsConfiguration для поддержки нескольких мониторов.

Ответ 2

Мне никогда не нравилось использовать Robot, поэтому я создал свой собственный простой метод для создания скриншотов объектов JFrame:

public static final void makeScreenshot(JFrame argFrame) {
Rectangle rec = argFrame.getBounds();
BufferedImage bufferedImage = new BufferedImage(rec.width, rec.height, BufferedImage.TYPE_INT_ARGB);
argFrame.paint(bufferedImage.getGraphics());

try {
// Create temp file
File temp = File.createTempFile("screenshot", ".png");

// Use the ImageIO API to write the bufferedImage to a temporary file
ImageIO.write(bufferedImage, "png", temp);

// Delete temp file when program exits
temp.deleteOnExit();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Ответ 3

Если вы хотите захватить все мониторы, вы можете использовать следующий код:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] screens = ge.getScreenDevices();

Rectangle allScreenBounds = new Rectangle();
for (GraphicsDevice screen : screens) {
Rectangle screenBounds = screen.getDefaultConfiguration().getBounds();

allScreenBounds.width += screenBounds.width;
allScreenBounds.height = Math.max(allScreenBounds.height, screenBounds.height);
}

Robot robot = new Robot();
BufferedImage screenShot = robot.createScreenCapture(allScreenBounds);
Ответ 4
public void captureScreen(String fileName) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenRectangle);
ImageIO.write(image, "png", new File(fileName));
}
java image