我想获得Canvas
内特定坐标的颜色。我已经尝试使用此代码获取快照:
WritableImage snap = gc.getCanvas().snapshot(null, null);
snap.getPixelReader().getArgb(x, y); //This just gets the color without assigning it.
但是我的申请需要花费太多时间。我想知道是否有其他方法可以访问我知道坐标的像素的颜色。
答案 0 :(得分:5)
Canvas
通过调用GraphicsContext
的方法来缓冲规定的绘图指令。在以后的pulse中呈现Canvas
之前, 没有要读取的像素,并且API中没有公开指令缓冲区的内部格式。
作为替代方案,请考虑使用图示BufferedImage
的here进行绘制,以便直接并通过其WritableRaster
访问图像的像素。将以下行添加到此完整example输出ARGB顺序中不透明红色的预期值:ffff0000
。
System.out.println(Integer.toHexString(bi.getRGB(50, 550)));
答案 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);
}
}
}