Java 如何使用awt.Robot以本机hdpi分辨率捕获屏幕截图?
如何以本机屏幕分辨率捕获屏幕截图 用于运行该程序的机器是macbook pro retina 15,分辨率为2880 x 1800 px。但是,来自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不会做这项工作,
Robot
类的createScreenCapture()
的输出仅输出其中的一半
下面的尺寸屏幕大小仅返回1440 x 900像素
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
我目前正在运行JRE 9和最新版本的Eclipse。Robot do不会做这项工作,它会以高分辨率失败
如果您使用的是Windows请尝试此操作,否则请告诉我是哪个操作系统 你需要我帮忙吗 使用Java12和JNA5.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);
}
}
}