Graphics2D Interpolation与非常小的BufferedImages不兼容

时间:2014-05-08 20:42:50

标签: java graphics interpolation

我用Java制作一个小游戏,它使用像素图形样式,有许多精灵16x16或32x32像素。然而,当我旋转它们时,我不想要"锯齿"在旁边,所以我使用了RenderingHint

RenderingHint.KEY_INTERPOLATION
RenderingHint.VALUE_INTERPOLATION_BILINEAR

不幸的是,由于使用的许多图像非常小(16x16,32x32),因此生成的图像完全无法使用。输出:

http://imgur.com/a/roRh4

如您所见,小图形模糊不清。这是大图像的预期效果,但对于小图像,它非常糟糕。

一种解决方案是提高我所有图形的分辨率,同时保持" blocky"影响。这将是一种痛苦,那么还有另一种调整插值的方法吗?

非常感谢你们。

1 个答案:

答案 0 :(得分:0)

升级您的小图片并改为使用它:

BufferedImage tiny = ImageIO.read(new File("..."));
BufferedImage bigger = new BufferedImage(tiny.getWidth()*10, tiny.getHeight()*10, tiny.getType());
Graphics2D g = bigger.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g.drawImage(tiny, 0, 0, bigger.getWidth(), bigger.getHeight(), 0, 0, tiny.getWidth(), tiny.getHeight(), null);

将10比例因子替换为可提供可接受结果的最小值。

使用高质量插值完成剩余的渲染。