我开始使用JavaFX,基本上我想要实现的是拾色器。 起初,我想到了一个带有LinearGradient的矩形,它通过所有的主要/次要颜色。
看起来像我想要的,但问题是我无法在此节点中的给定坐标(x,y)处获取RGB值。 我知道你可以通过任何形状的填充属性来实现它,如果它是一个颜色。
但是无论如何要获得LinearGradient / Paint中的任何内容的RGB值吗?
答案 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
调用有进行屏幕捕获的问题,屏幕必须可见。应该有更好的方法来填充缓冲的图像,但我还没有遇到它。