如何在JavaFX中获取像素的RGB值

时间:2009-03-13 07:42:39

标签: javafx

我开始使用JavaFX,基本上我想要实现的是拾色器。 起初,我想到了一个带有LinearGradient的矩形,它通过所有的主要/次要颜色。

看起来像我想要的,但问题是我无法在此节点中的给定坐标(x,y)处获取RGB值。 我知道你可以通过任何形状的填充属性来实现它,如果它是一个颜色。

但是无论如何要获得LinearGradient / Paint中的任何内容的RGB值吗?

2 个答案:

答案 0 :(得分:1)

ColorPicker JavaFX example有帮助吗?

[...]

function colorAtLocation(x:Integer, y:Integer) : Color {
    var bimg = iv.image.bufferedImage;
    if (x < 0 or x >= bimg.getWidth() or y < 0 or y >= bimg.getHeight()) {
        return null;
    }
    var rgb = bimg.getRGB(x, y);
    var r = Bits.bitAnd(Bits.shiftRight(rgb, 16), 0xff);
    var g = Bits.bitAnd(Bits.shiftRight(rgb,  8), 0xff);
    var b = Bits.bitAnd(Bits.shiftRight(rgb,  0), 0xff);
    Color.rgb(r, g, b)
}

function updateSelectedColor(e:MouseEvent) {
    var rgb = colorAtLocation(e.x, e.y);
    if (rgb != null) {
        picker.selectedColor = rgb;
    }
}

[...]

答案 1 :(得分:0)

ColorPicker JavaFX示例以加载到png的{​​{1}}图像开始,然后填充image

问题始于包含ImageView的JavaFX Rectangle

要将矩形内容放入缓冲图像,可以使用java.awt.Robot:

LinearGradient

其中 var rectangle = new java.awt.Rectangle(x,y,width,height); var robot = new java.awt.Robot(); var bufferedImage = robot.createScreenCapture(rectangle); 将描述包含感兴趣位的JavaFX矩形的坐标

rectangle调用有进行屏幕捕获的问题,屏幕必须可见。应该有更好的方法来填充缓冲的图像,但我还没有遇到它。