如何使用awt.Robot捕获本机hdpi分辨率的屏幕截图?

时间:2018-01-07 19:42:54

标签: java swing awt

如何以原生屏幕分辨率捕获屏幕截图?

用于运行程序的机器是macbook pro retina 15,分辨率为2880 x 1800像素。但是,来自createScreenCapture()类的Robot输出仅输出一半。

以下尺寸 screenSize 仅返回1440 x 900像素。

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

我目前正在运行JRE 9和最新版本的Eclipse。

1 个答案:

答案 0 :(得分:2)

机器人不会做这项工作,它在高分辨率下会失败!

  

如果您使用 Windows ,请尝试此操作,否则请告诉我哪个操作系统   您使用,我可以帮您吗

     

使用 Java 12 JNA 5.4.0

import com.sun.jna.platform.win32.GDI32Util;
import com.sun.jna.platform.win32.WinDef.HWND;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

public class Main {

    public static void main(String[] args) {
        try {
            //Get JNA User32 Instace
            com.sun.jna.platform.win32.User32 user32 = com.sun.jna.platform.win32.User32.INSTANCE;
            //Get desktop windows handler
            HWND hwnd = user32.GetDesktopWindow();
            //Create a BufferedImage
            BufferedImage bi;
            //Function that take screenshot and set to BufferedImage bi
            bi = GDI32Util.getScreenshot(hwnd);
            //Save screenshot to a file
            ImageIO.write(bi, "png", new java.io.File("screenshot.png"));
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}