Как бы я начал писать образ javafx.scene.image.Image в файл. Я знаю, что вы можете использовать ImageIO на BufferedImages, но есть ли способ сделать это с помощью изображения javafx?
Запись javafx.scene.image.Image в файл?
Ответ 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);