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

Java 如何使用awt.Robot以本机hdpi分辨率捕获屏幕截图?,java,swing,awt,Java,Swing,Awt,如何以本机屏幕分辨率捕获屏幕截图 用于运行该程序的机器是macbook pro retina 15,分辨率为2880 x 1800 px。但是,来自Robot类的createScreenCapture()的输出仅输出其中的一半 下面的尺寸屏幕大小仅返回1440 x 900像素 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 我目前正在运行JRE 9和最新版本的Eclipse。Robot do不会做这项工作,

如何以本机屏幕分辨率捕获屏幕截图

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

下面的尺寸屏幕大小仅返回1440 x 900像素

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

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

Robot do不会做这项工作,它会以高分辨率失败

如果您使用的是Windows请尝试此操作,否则请告诉我是哪个操作系统 你需要我帮忙吗

使用Java12JNA5.4.0


Robot
可能不关心本机分辨率,只使用当前使用的分辨率。您可能需要寻找一种更为本地的方法。是否有一种方法可以根据您的需要使java.awt dpi感知?如果您搜索java retina,您会注意到这对他们来说不是一条简单的道路。是的,我可能会感到困惑,但我看到它应该在java 8和9中支持hdpi。这是OracleJDK9版本的一个示例。寻找“视网膜”。它被支持并不意味着你的分辨率不是1440x900。方法
getScreenSize()
没有提到任何关于屏幕本机分辨率的内容。你可能想玩弄
图形设备
和其他相关类,看看你能从当前环境中获得什么样的信息。你能把你的评论翻译成英语吗?当然,伙计;)在这里,您可以很幸运地看到,这不适用于多个监视器。只捕获主要监控。
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);
        }
    }
}