如何从随机字节数组中创建图像

时间:2020-07-12 17:56:46

标签: java image-processing

我一直在使用Google quickdraw数据集,但是在处理数据时遇到了一些麻烦。我正在用Java工作,我已经下载了数据并将每个文件转换为字节数组(例如full_numpy_bitmap_anvil.npy变成了一个98965104字节的字节数组,大约126231张图片)。我希望能够从字节数组重新创建这些图片。我一直遇到的麻烦是我可以将数组拆分为相关的子数组(每个子数组784个字节),但是我无法将它们变回图片,因为您不能以通常的方式将随机字节写入图像 例如

 ByteArrayInputStream bis = new ByteArrayInputStream(data);
 BufferedImage bImage2 = ImageIO.read(bis);
 ImageIO.write(bImage2, "jpg", new File("output.jpg"))

未收到错误消息

 Exception in thread "main" java.lang.IllegalArgumentException: image == null!

我需要某种方式将单个像素写入新的缓冲图像吗?还是有其他方法可以做到这一点?

注意:我知道这种处理在python中会更容易,但是正如我所说的,我正在使用Java。

1 个答案:

答案 0 :(得分:1)

我需要某种方式将单个像素写入新的缓冲图像吗?

如果这是您需要的,请确保您可以做到。这是一个使用随机像素创建100x100灰度图像的示例:

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
byte[] data = buffer.getData();

Random rng = new Random();
for (int i = 0; i < data.length; i++) {
    data[i] = (byte) rng.nextInt(256);
}