【问题标题】:JavaFX: Disable image smoothing on Canvas objectJavaFX:禁用画布对象上的图像平滑
【发布时间】:2014-05-08 16:20:54
【问题描述】:

我正在使用 JavaFX 制作一个用于桌面的精灵编辑器。

我正在尝试实现缩放功能,但遇到了一个问题:我不知道如何Canvas 对象上禁用图像平滑

按照每个实现Canvas 缩放的教程,我正在调用Canvas.setScaleX()Canvas.setScaleY()。但是我的图像在放大时显得模糊

我有一些测试代码here 来演示。

因为这是一个精灵编辑器,所以使用清晰的边缘对我来说很重要。在Canvas 上修复图像平滑的替代方法是使用non-smoothing ImageView,并使用隐藏的Canvas 进行绘制,我宁愿避免使用。

感谢您的帮助。


(here's a link to a related question, but doesn't address my particular problem)

【问题讨论】:

    标签: image-processing canvas javafx zooming


    【解决方案1】:

    我遇到了同样的模糊问题。

    就我而言,我的电脑配备了 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 会绕过绘制图像时发生的抗锯齿。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 2018-09-05
      • 2012-08-05
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多