我正在使用JavaFX制作精灵编辑器,以便在桌面上使用。
我正在尝试实现缩放功能,但我遇到了一个问题:我无法弄清楚如何禁用Canvas
对象上的图像平滑。
我按照每个实施Canvas.setScaleX()
缩放的教程调用Canvas.setScaleY()
和Canvas
。但放大时我的图像显得模糊。
我有一些测试代码here来演示。
由于这是一个精灵编辑器,因此使用清晰的边缘对我来说非常重要。在Canvas
上修复图片平滑的替代方法是使用non-smoothing ImageView
,并使用隐藏的Canvas
进行绘制,我宁愿避免使用。
非常感谢帮助。
(here's a link to a related question, but doesn't address my particular problem)
答案 0 :(得分:3)
我在模糊方面遇到了同样的问题。
在我的情况下,我的电脑有Retina显示屏。 Retina Display使像素以子像素呈现。将图像绘制到画布时,将使用抗锯齿为子像素绘制图像。我没有找到防止这种抗锯齿发生的方法(尽管可以使用其他画布技术,例如HTML5's Canvas)
与此同时,我有一个解决方法(虽然我关注表现):
public class ImageRenderer {
public void render(GraphicsContext context, Image image, int sx, int sy, int sw, int sh, int tx, int ty) {
PixelReader reader = image.getPixelReader();
PixelWriter writer = context.getPixelWriter();
for (int x = 0; x < sw; x++) {
for (int y = 0; y < sh; y++) {
Color color = reader.getColor(sx + x, sy + y);
if (color.isOpaque()) {
writer.setColor(tx + x, ty + y, color);
}
}
}
}
}
PixelWriter会绕过绘制图像时出现的消除锯齿现象。