Как создать изображение из массива байтов RANDOM - PullRequest
0 голосов
/ 12 июля 2020

Я работал с набором данных 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 Ответ

1 голос
/ 12 июля 2020

Может, мне нужен способ записи отдельных пикселей в новое буферное изображение?

Если это то, что вам нужно, конечно, вы можете это сделать. Вот пример, который создает изображение в оттенках серого 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);
}
...