Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取JavaFX画布像素的最佳方式是什么?_Java_Canvas_Javafx_Colors - Fatal编程技术网

读取JavaFX画布像素的最佳方式是什么?

读取JavaFX画布像素的最佳方式是什么?,java,canvas,javafx,colors,Java,Canvas,Javafx,Colors,我想获得画布中特定坐标的颜色。我已尝试使用以下代码获取快照: WritableImage snap = gc.getCanvas().snapshot(null, null); snap.getPixelReader().getArgb(x, y); //This just gets the color without assigning it. 但我的申请时间太长了。我想知道是否有其他方法可以访问我知道坐标的像素的颜色。a通过调用a的方法来缓冲指定的绘图指令。在以后渲染画布之前,没有可读取的

我想获得
画布中特定坐标的颜色。我已尝试使用以下代码获取快照:

WritableImage snap = gc.getCanvas().snapshot(null, null);
snap.getPixelReader().getArgb(x, y); //This just gets the color without assigning it.
但我的申请时间太长了。我想知道是否有其他方法可以访问我知道坐标的像素的颜色。

a通过调用a的方法来缓冲指定的绘图指令。在以后渲染
画布
之前,没有可读取的像素,并且指令缓冲区的内部格式未在API中公开

作为一种选择,考虑绘制成A,图示,它允许直接访问图像像素并通过其访问。将以下行添加到此完成项中,以ARGB顺序输出不透明红色的预期值:

ffff0000

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

请在代码中添加说明,解释如何解决问题,或添加注释
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);
        }
    }
}