Как получить значения RGB пикселя в JavaFX - PullRequest
2 голосов
/ 13 марта 2009

Я начинаю работать с JavaFX, и в основном я пытаюсь реализовать Color Picker. Сначала я подумал о том, чтобы иметь прямоугольник с линейным градиентом, который проходит через все основные / второстепенные цвета.

Похоже, что я хочу, но проблема в том, что я не могу получить значения RGB по заданной координате (x, y) в этом узле. Я знаю, что вы можете сделать это через свойство fill любого Shape, если это Color.

Но есть ли способ получить значения RGB для чего-либо внутри LinearGradient / Paint?

Ответы [ 2 ]

1 голос
/ 13 марта 2009

Помогает ли это Пример ColorFicker JavaFX ?

[...]

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;
    }
}

[...]
0 голосов
/ 30 марта 2009

Пример ColorPicker JavaFX начинается с png изображения, которое загружается в image, а затем заполняет ImageView.

Вопрос начинается с JavaFX Rectangle, содержащего LinearGradient.

Чтобы получить содержимое прямоугольника в буферизованное изображение, можно использовать java.awt.Robot:

        var rectangle = new java.awt.Rectangle(x,y,width,height);
        var robot = new java.awt.Robot();
        var bufferedImage = robot.createScreenCapture(rectangle);   

где rectangle будет описывать координаты прямоугольника JavaFX, содержащего интересующие биты.

Вызов robot.createScreenCapture имеет то, что для захвата экрана экран должен быть виден. Должен быть лучший способ заполнить буферизованное изображение, но я еще не сталкивался с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...