Ответ 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();
}