Reputation: 3490
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
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
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
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