Масштабирование дисплея Windows, влияющее на JFrameJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Масштабирование дисплея Windows, влияющее на JFrame

Сообщение Anonymous »

Мое Java-приложение делает снимок экрана, а затем отображает его.
Обычно это была бы забавная шутка, когда пользователь щелкал мышью и не получал ответа, пытаясь взаимодействовать с изображением. .
Однако, если у пользователя в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»