Progo
Progo

Reputation: 3490

Increase resolution of java screenshot

I am using the following code to take a screenshot in Java:

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws AWTException, IOException{
        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("Path/To/screenshot.png"));
    }
}

This code works, but the screen shot outputted is fairly low resolution. How can I increase the resolution of the screenshot?

Upvotes: 1

Views: 2539

Answers (3)

tf z
tf z

Reputation: 61

Maybe you need this before new Robot

System.setProperty("sun.java2d.uiScale", "1");

When you set desktop system scale,the java ui also scale.
Desktop scale set

Upvotes: 2

AlexO
AlexO

Reputation: 1444

Use Robot.createMultiResolutionScreenCapture, this was added in Java 9+.

For example (using Kotlin):

    val graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().defaultScreenDevice
    val screenWidth = graphicsDevice.displayMode.width
    val screenHeight = graphicsDevice.displayMode.height

    val robot = Robot(graphicsDevice)
    val rect = Rectangle(Toolkit.getDefaultToolkit().screenSize)

    val multiResolutionScreenshot = robot.createMultiResolutionScreenCapture(rect)
    val screenshot = multiResolutionScreenshot.getResolutionVariant(
            screenWidth.toDouble(), screenHeight.toDouble())

    ImageIO.write(screenshot as BufferedImage, "png", File("Path/To/screenshot.png"))

Upvotes: 0

lbalazscs
lbalazscs

Reputation: 17784

There is nothing wrong with this code. I have a screen resolution of 1680x1050 pixels, and the generated png file has exactly this size.

Upvotes: 2

Related Questions