Отключить автоматическое изменение масштаба BufferedImage в JDK9

Я использую настраиваемое средство рендеринга для изменения масштаба экрана для моих 8-битных компьютерных эмуляторов, которое прекрасно работает в средах до Java 9. В Java 9 это создает треугольные искажения на главном экране, когда JVM автоматически изменяет размер экрана, чтобы приспособиться к различным разрешениям. Это наиболее заметно, когда в эмуляторе включены строки сканирования. Я подозреваю, что это как-то связано с тем, что ==> http://openjdk.java.net/jeps/263 поставляется в Java 9.

В качестве примера, эффект можно увидеть при выполнении следующей программы на мониторе 4K с использованием Java 9 в Windows 10.

public static void main(String[] args){
    JFrame frame=new JFrame("Java version 9");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    BufferedImage image =new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
    Graphics2D g=image.createGraphics();
    g.setColor(Color.WHITE);
    for(int y=0;y<image.getHeight();y+=2){
        g.drawLine(0,y,image.getWidth(),y);
    }
    g.dispose();
    ImageIcon imageIcon=new ImageIcon(image);
    JLabel label=new JLabel(imageIcon);
    frame.add(label);
    frame.pack();
    frame.setVisible(true);
}

Рисунок 1

Ниже показано, как выглядит та же программа с использованием JDK 1.8.0_144, что является желаемым результатом.

Фигура 2.

Есть ли способ отключить автоматическое изменение размеров экранов по умолчанию в Java 9, которое также будет совместимо со средами до Java 9?

2 ответа

См. https://bugs.openjdk.java.net/browse/JDK-8189416 Кажется, это ошибка в коде Direct3D в JDK.

Обходной путь - "-Dsun.java2d.d3d=false" в командной строке.

Использование параметра -Dsun.java2d.uiScale=1.0 устраняет вышеуказанную проблему с предоставленными мною эмуляторами и тестовой программой. Я получил этот ответ от масштабирования JFrame в Java 9. Я бы предпочел программное решение, и отключение jdk 9 с высоким dpi для конкретной панели, похоже, является той же самой проблемой, что и моя проблема, и ответ при условии выглядит многообещающим.

Другие вопросы по тегам