我正在开发一个 Java 桌面应用程序,并注意到当将图像缩小到 50 像素左右时,图像往往看起来非常像素化且清晰。我尝试了多种方法来解决这个问题,包括
//I've tried every kind of interpolation, but to no avail
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
不过这些似乎对图像没有影响。我想知道是否有办法让它们更平滑。
在我的应用程序中:
在 VS Code 照片查看器中,比例为 10%(大约相同大小)
如有任何帮助,我们将不胜感激! 注意:仅在缩小图像尺寸时才会出现此问题。以 256x256 像素大小显示 256x256 分辨率图像完全可以正常工作。
编辑:这是一个最小的可重现示例,以显示插值/抗锯齿如何没有区别:
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 400);
final BufferedImage image = ImageIO.read(new File("home.png"));
JPanel pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.gray);
g2d.fillRect(0, 0, 400, 400);
//two examples, image on the left is without interpolation, image on the right is with interpolation
g2d.drawImage(image, 200, 200, 35, 35, null);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(image, 250, 200, 35, 35, null);
}
};
frame.add(pane);
frame.setVisible(true);
该程序使用此图像: https://imgur.com/6xto1o5
产生的结果如下:
左边的房子是在没有插值/抗锯齿的情况下绘制的,右边的图像则两者都有。正如您所看到的,没有明显的差异。