2014-03-29 48 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繞過繪製圖像時出現的消除鋸齒。