2017-02-19 5 views
3

Я программирую приложение для обработки изображений, используя javafx для gui, и я хочу показать обработанное изображение на экране. Моя программа обрабатывает изображение как трехмерный двойной массив, такой как double [3] [1080] [1920], поэтому мне нужно уменьшить цветовое пространство изображения и преобразовать удвоения в байты или (если возможно) шорты, потому что ImageView javafx не поддерживает значения с плавающей запятой или 64 бит для каждого из компонентов RGB. Я узнал, что Imageview может загружать только данные из файла или входного потока, поэтому мне нужно создать BufferedImage, заполнить его данными конверта из массива и записать кодировку BufferedImage как JPEG, BMP, PNG или GIF в поток и прочитайте этот поток с конструкцией javafx.scene.image.Image и передайте это изображение в ImageView. Жесткий способ преобразования массива в образ, я новичок хотел быть закодированным в любом формате файла, но я не нашел альтернативы этому (кроме использования javafx).

Теперь мой первый вопрос:
Метод setRGB BufferedImage принимает все цветовые компоненты, склеенные вместе как int. Как я могу правильно комбинировать их?
И мой второй вопрос:
Является ли способ yy сохранить более 8 бит для каждого компонента?

Спасибо за помощь!Создание javafx Изображение из массива данных

+0

Нет необходимости проходить через формат файла. Вы можете создать 'ImageView' и установить' Image' непосредственно с помощью 'setImage (...)'. Используйте ['WritableImage'] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/WritableImage.html) и его [' PixelWriter'] (http: // docs. oracle.com/javase/8/javafx/api/javafx/scene/image/PixelWriter.html), чтобы поместить данные в изображение. –

+0

Использование 'WritableImage' я могу не только избежать конверсий, я могу использовать' setPixels' с 'PixelFormat.getByteRgbInstance' для обработки данных в виде массива' byte'. Это очень помогло. Спасибо! – Niclas

ответ

Смежные вопросы