int[] rgb = image.getRGB(0, 0, width, height, null, 0, width);
или
WritableRaster raster = image.getWritableRaster();
По общему признанию getRGB
проще.Выше я предполагал, что размер сканирования равен ширине, иногда он выравнивается.RGBA, ARGB и один могут различаться.
Это линеаризованный одномерный массив, можно использовать IntBuffer
, даже изменить порядок байтов на младший, если это необходимо.
Path path = Paths.get("lena.raw");
byte[] content = Files.readAllBytes(path);
IntBuffer buf = ByteBuffer.wrap(content) /*.order(ByteOrder.LITTE_ENDIAN)*/ .asIntBuffer();
int[] rgb = new int[content.length / 4];
buf.get(rgb);
BufferedImage outImage = new BufferedImage(width, length, BufferedImage.TYPE_INT_ARGB);
outImage.setRGB(0, 0, width, height, rgb, 0, width);
ImageIO.write(outImage, "png", new FileOutputStream(...));
Также просмотрите файловый канал и MappedByteBuffer для увеличения скорости и использования памяти.
Вероятно, следует ожидать появления ложных цветов в первый раз (TYPE_INT_ARGB).