JavaFX: Disable image smoothing on Canvas object

前端 未结 1 603
太阳男子
太阳男子 2021-01-05 10:01

I\'m making a sprite editor using JavaFX for use on desktops.

I\'m attempting to implement zooming functionality, but I\'ve run into a problem: I can\'t figure out h

相关标签:
1条回答
  • 2021-01-05 10:46

    I was having the same issue with the blurring.

    In my case, my computer has Retina Display. Retina Display causes a pixel to be rendered with sub-pixels. When drawing images to the canvas, the image would be drawn with antialiasing for the sub-pixels. I have not found a way to prevent this antialiasing from occurring (although it is possible with other canvas technologies such as HTML5's Canvas)

    In the meantime, I have a work-around (albeit I'm concerned about performance):

    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);
                }
             }
          }
       }
    }
    

    The PixelWriter bypasses the anti-aliasing that occurs when drawing the image.

    0 讨论(0)
提交回复
热议问题