读取JavaFX Canvas像素的最佳方法是什么?

时间:2017-08-15 01:15:16

标签: java canvas javafx colors

我想获得Canvas内特定坐标的颜色。我已经尝试使用此代码获取快照:

WritableImage snap = gc.getCanvas().snapshot(null, null);
snap.getPixelReader().getArgb(x, y); //This just gets the color without assigning it.

但是我的申请需要花费太多时间。我想知道是否有其他方法可以访问我知道坐标的像素的颜色。

2 个答案:

答案 0 :(得分:5)

Canvas通过调用GraphicsContext的方法来缓冲规定的绘图指令。在以后的pulse中呈现Canvas之前, 没有要读取的像素,并且API中没有公开指令缓冲区的内部格式。

作为替代方案,请考虑使用图示BufferedImagehere进行绘制,以便直接并通过其WritableRaster访问图像的像素。将以下行添加到此完整example输出ARGB顺序中不透明红色的预期值:ffff0000

System.out.println(Integer.toHexString(bi.getRGB(50, 550)));

image

答案 1 :(得分:0)

public class Pixel
{
    private static final SnapshotParameters SP = new SnapshotParameters();
    private static final WritableImage WI = new WritableImage(1, 1);
    private static final PixelReader PR = WI.getPixelReader();

    private Pixel()
    {
    }

    public static int getArgb(Node n, double x, double y)
    {
        synchronized (WI)
        {
            Rectangle2D r = new Rectangle2D(x, y, 1, 1);
            SP.setViewport(r);
            n.snapshot(SP, WI);
           return PR.getArgb(0, 0);
        }
    }

    public static Color getColor(Node n, double x, double y)
    {
        synchronized (WI)
        {
            Rectangle2D r = new Rectangle2D(x, y, 1, 1);
            SP.setViewport(r);
            n.snapshot(SP, WI);
            return PR.getColor(0, 0);
        }
    }
}