我一直在使用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。
答案 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);
}