2014-03-29 28 views
5

我正在使用JavaFX在桌面上使用精灵编辑器。JavaFX:在画布对象上禁用图像平滑

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

我打电话Canvas.setScaleX()Canvas.setScaleY()根据每个教程执行Canvas缩放。但是当放大时,我的图像显得模糊不清。

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

What I getWhat I want

由于这是一个精灵编辑器,我有清晰的边缘一起工作是很重要的。在Canvas上修复图像平滑的替代方法是使用non-smoothing ImageView,并使用隐藏的Canvas进行绘制,这是我宁愿避免的。

帮助表示赞赏。


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

回答

3

我是有模糊的同样的问题。

就我而言,我的电脑有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绕过绘制图像时出现的消除锯齿。