windows-10 - 在 JDK9 中禁用 BufferedImage 的自动缩放

标签 windows-10 java-9 hidpi

我使用自定义渲染器为我的 8 位计算机模拟器重新缩放屏幕,该模拟器在 Java 9 之前的环境中运行良好。在 Java 9 中,当 JVM 自动调整屏幕大小时以适应不同的分辨率时,它会在主屏幕上产生三角形扭曲。当在仿真器中启用扫描线时,这一点最为明显。我怀疑它与此有关 ==> http://openjdk.java.net/jeps/263在 Java 9 中交付。

举个例子,在Windows 10上使用Java 9在4K显示器上执行下面的程序可以看到效果。

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 enter image description here

以下是同一程序使用 JDK 1.8.0_144 时的样子,这是预期的结果。

图 2。 enter image description here

有没有办法在 Java 9 中禁用默认的屏幕自动重新缩放,同时与 Java 9 之前的环境兼容?

最佳答案

参见 https://bugs.openjdk.java.net/browse/JDK-8189416 它似乎是 JDK 中 Direct3D 代码中的错误。

解决方法是在命令行上使用“-Dsun.java2d.d3d=false”。

关于windows-10 - 在 JDK9 中禁用 BufferedImage 的自动缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46736757/

相关文章:

java - 4K 屏幕上的 Netbeans 缩放

c++ - 在 SDL2 中,游戏显示在屏幕的左下角

networking - 从 Windows 主机连接到 WSL2 上的服务器不起作用

启动fork时出现Maven错误,请检查日志中的输出

Java:是否弃用了 `sun.awt.image` 包?

java - javax.xml.bind.JAXBException 的 ClassNotFoundException 与 Spring Boot 切换到 Java 9 时

java - Map.ofEntries() 而不是 Map.of() 有什么用

java - 在 Java Swing 中从原始图像生成 HiDPI ImageIcon

python - 如何让 .py 文件默认使用 Python Shell 运行?

windows - 无法获得公钥登录以在 Windows 10 ssh 服务器上工作