Эквивалент BufferedImage (java awt) на JavaFx

Я работаю с JavaFx и ищу эквивалент AWT BufferedImage. Я видел, что могу использовать SwingFXUtils для использования awt BufferedImage с JavaFx, но я не хочу использовать awt.

На самом деле я ищу структуру для отображения таблицы пикселей, связанную с ColorModel.

Кто-нибудь знает эквивалент с JavaFx?

Большое спасибо.


person Djeko    schedule 25.06.2014    source источник


Ответы (1)


Ближе всего к BufferedImage в JavaFX вы получите javafx.scene.image.WritableImage. Это подкласс javafx.scene.image.Image, представленный в JavaFX 2.2.

В зависимости от вашего варианта использования javafx.scene.canvas.Canvas и javafx.scene.canvas.GraphicsContext (аналогично Graphics2D Java2D) могут подойти лучше.

Чтобы нарисовать узел Canvas и получить содержимое в WritableImage, используйте (адаптировано из Canvas JavaDoc):

// Create canvas
Canvas canvas = new Canvas(250, 250);
GraphicsContext gc = canvas.getGraphicsContext2D();

// Paint on it
gc.setFill(Color.BLUE);
gc.fillRect(75, 75, 100, 100);

// NOTE: The canvas must be part of a Scene for the following to work properly, omitted for brevity

// Obtain a snapshot of the canvas
WritableImage image = canvas.snapshot(null, null);

Дополнительную информацию см. в разделе Работа с Canvas в руководствах по JavaFX.

person Harald K    schedule 25.06.2014
comment
Спасибо за Ваш ответ. Я пробовал WritableImage, но он недостаточно эффективен. Если я хочу изменить цвет каждого пикселя, я должен сделать для каждого пикселя. Это очень медленно. Вы знаете, есть ли другой путь? - person Djeko; 26.06.2014
comment
WriteableImage работает очень хорошо в моем (ограниченном) опыте. См. мой ответ здесь, чтение изображения из файла за 40-60 мс. Но это может не подходить для вашего варианта использования. Может быть, javafx.scene.canvas.Canvas и javafx.scene.canvas.GraphicsContext больше того, что вы ищете? - person Harald K; 26.06.2014
comment
На самом деле у меня есть таблица значений (каждый элемент таблицы соответствует одному пикселю). И я хочу связать каждое значение с цветом, а затем отобразить таблицу. Но значения таблицы каждый раз меняются. Поэтому мне приходится менять цвет каждого пикселя в режиме реального времени. - person Djeko; 26.06.2014
comment
Думаю, я максимально точно ответил на ваш вопрос. Если вам нужна помощь с чем-то еще, опубликуйте новый вопрос, описав, что вы хотите решить, и код, который у вас есть. Мне кажется, что ваш лучший выбор - Canvas, у других людей могут быть другие / лучшие идеи. :-) - person Harald K; 26.06.2014
comment
Спасибо, я опубликую новый вопрос для более подробной информации. - person Djeko; 27.06.2014