Обычно это была бы забавная шутка, когда пользователь щелкал мышью и не получал ответа, пытаясь взаимодействовать с изображением. .
Однако, если у пользователя в Windows установлено масштабирование дисплея, например, 125 % (в значительной степени требуется для больших мониторов, иначе ваш текст/значки будут очень маленькими), тогда, когда я используйте JFrame для отображения их BufferedImage размером 1920x1080, вместо этого он отображается с разрешением 2400x1350 как размытый пиксельный беспорядок. Очевидно, что в этом случае розыгрыш не сработает.
Как я могу заставить это работать так, как задумано, независимо от того, что пользователь установил для масштабирования экрана?
Код:
Код: Выделить всё
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinDef.HWND;
public class Test {
public static void main(String[] args) throws Exception {
BufferedImage capture = captureNotepadWindow();
int width = capture.getWidth();
int height = capture.getHeight();
System.out.println(width + "," + height);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon(capture)));
frame.setPreferredSize(new Dimension(width, height));
frame.setUndecorated(true);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static BufferedImage captureNotepadWindow() throws Exception {
// Find notepad window handle
HWND notepadHwnd = User32.INSTANCE.FindWindow("Notepad", null);
if (notepadHwnd == null) {
throw new Exception("Notepad window not found");
}
return GDI32Util.getScreenshot(notepadHwnd);
}
}
Я также пытался уменьшить изображение на 1/1,25, чтобы масштабирование Windows вернуло его к оригиналу. размер, но изображение было очень пиксельным из-за масштабирования.
Подробнее здесь: https://stackoverflow.com/questions/785 ... g-a-jframe
Мобильная версия