我使用自定义渲染器为我的 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);
}
以下是同一程序使用 JDK 1.8.0_144 时的样子,这是预期的结果。
有没有办法在 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/