У меня есть массив байтов размером 640 * 480 * 3, а его порядок байтов равен r, g, b. Я пытаюсь преобразовать его в Image. Следующий код не работает:Преобразование байтового массива в изображение
BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
с excepton
Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
at javax.imageio.ImageIO.write(ImageIO.java:1520)
Я также попробовал этот код:
ImageIcon imageIcon = new ImageIcon(data);
Image img = imageIcon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_3BYTE_BGR); //Exception
но безуспешно:
Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) must be > 0
Как можно Я получаю изображение из этого массива?
'Простой массив байтов не является распознанным форматом изображения. 'что является источником этой информации и почему это так? И второй случай на самом деле показывает, что у него проблема с самим изображением, он намерен прочитать – Sage
@Sage Источник информации - это здравый смысл *. Что-то не указано не может быть общепризнанным форматом изображения, или он может? Существует огромное количество способов преобразования изображения в байт [] (и ОП описал его кратко 640 * 480 * 3 - это не оставляет места для * любых * метаданных, поэтому он не может быть общим форматом). По крайней мере, это очень очевидно для меня. И проблема «чтения» изображения является естественным результатом того, что формат не распознается. Все исключения приводят прямо или косвенно из нераспознаваемого формата изображения. Взгляните на Javadocs для IconImage. – Durandal
спасибо, я пропустил '640 * 480 * 3' упоминание. На самом деле его второе исключение заставило меня отвлечь меня и смутить. – Sage