sor*_*bet 5 javafx canvas zoom image-processing
我正在使用JavaFX制作精灵编辑器以用于桌面.
我正在尝试实现缩放功能,但我遇到了一个问题:我无法弄清楚如何禁用Canvas对象上的图像平滑.
我正在打电话,Canvas.setScaleX()并Canvas.setScaleY()按照每个实施Canvas缩放的教程.但放大时我的图像看起来很模糊.
我在这里有一些测试代码来演示.


由于这是一个精灵编辑器,因此使用清晰边缘对我来说非常重要.固定图像平滑的替代方法Canvas是使其具有非平滑性ImageView,并且具有隐藏Canvas以进行绘制,我宁愿避免使用.
感谢帮助.
小智 3
我也遇到了同样的模糊问题。
就我而言,我的电脑配备 Retina 显示屏。视网膜显示器导致像素用子像素渲染。将图像绘制到画布时,将使用子像素的抗锯齿功能绘制图像。我还没有找到一种方法来防止这种抗锯齿的发生(尽管使用其他画布技术(例如HTML5 的 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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
PixelWriter 绕过绘制图像时发生的抗锯齿。