Запись javafx.scene.image.Image в файл?

Как бы я начал писать образ javafx.scene.image.Image в файл. Я знаю, что вы можете использовать ImageIO на BufferedImages, но есть ли способ сделать это с помощью изображения javafx?

Ответы

Ответ 1

Почти 3 года спустя, и теперь у меня есть знания, чтобы сделать это и ответить на это. Да, исходный ответ также был верным, но он включал сначала преобразование изображения в BufferedImage, и я в идеале хотел избежать качания целиком. Пока это выводит исходную версию RGBA изображения, которая достаточно хороша для того, что мне нужно было сделать. Я действительно мог просто использовать raw BGRA, так как я писал программное обеспечение, чтобы открыть результат, но поскольку gimp не может открыть, что я думаю, я бы преобразовал его в RGBA.

Image img = new Image("file:test.png");
int width = (int) img.getWidth();
int height = (int) img.getHeight();
PixelReader reader = img.getPixelReader();
byte[] buffer = new byte[width * height * 4];
WritablePixelFormat<ByteBuffer> format = PixelFormat.getByteBgraInstance();
reader.getPixels(0, 0, width, height, format, buffer, 0, width * 4);
try {
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("test.data"));
    for(int count = 0; count < buffer.length; count += 4) {
        out.write(buffer[count + 2]);
        out.write(buffer[count + 1]);
        out.write(buffer[count]);
        out.write(buffer[count + 3]);
    }
    out.flush();
    out.close();
} catch(IOException e) {
    e.printStackTrace();
}

Ответ 2

Просто сначала преобразуйте его в BufferedImage, используя javafx.embed.swing.SwingFXUtils:

Image image = ... ; // javafx.scene.image.Image
String format = ... ;
File file = ... ;
ImageIO.write(SwingFXUtils.fromFXImage(image, null), format, file);