Я разрабатываю приложение, которое требует много сравнения данных изображения в JavaFX. Для этого сравнения мне нужно получить данные rgb пикселей в изображениях. Предположим, что картина, которую мне нужно сравнить, - это Picture1 и Picture2. Picture1 - это входное изображение, выбранное пользователем. Picture2 - это рисунок, который я делаю программно.Альтернатива (ов) преобразования Canvas в WritableImage
AFAIK, единственный способ получить данные rgb на пиксель в JavaFX - с PixelReader
из Image
. Это нормально для Picture1, так как это вход. Но мне нужно сделать рисунок на Picture2 и Picture2 является Canvas
(Обращают многоугольники на Picture2 и потому, что рисунок попиксельны с PixelWriter немного сложнее IMO) и не имеет PixelReader
или что-то с аналогичной функциональностью , Так что мое решение выглядит следующим образом:
- Читать входное изображение и сделать picture1
- Сделать холст и сделать рисунок
- Закрепить Холст к Scene
- Make моментальный снимок сцены и сделать WritableImage (Picture2)
- Сравнить Picture1 и Picture2
Так у меня есть метод с чем-то вроде:
public static WritableImage makeDrawableImage(Canvas in) {
AnchorPane root = new AnchorPane(in);
WritableImage out = new WritableImage((int)in.getWidth(), (int)in.getHeight());
Scene sc = new Scene(root, in.getWidth(), in.getHeight());
out = in.snapshot(null, null);
return out;
}
Однако для моментального снимка требуется очень много времени. Значение out
никогда не присваивается. Я не знаю, что я сделал неправильно.
Есть альтернативы для перевода: Canvas
на Image
или WritableImage
? Или, может быть, есть библиотека, чтобы сделать рисование полигонов проще с помощью PixelWriter
?
Пожалуйста, будьте мягкими на меня. Это мой первый вопрос о переполнении стека, и я не являюсь программистом реального или студентом ИТ. Я кодирую как хобби.
Итак, заранее. Приветствия.
Это все еще не работает :(Моя проблема связана с 'out = in.snapshot (null, null);' Это занимает очень много времени. Неужели так долго делать снимок? –
Что такое doen ' t Работа для вас? Насколько велики ваши изображения? – mipa
Очевидно, что вы все еще используете свой код, а не мой. В моем коде нет строки 'out = in.snapshot (null, null);' Съемка холста 2000x2000 просто занимает миллисекунды. – mipa