Java - сохранение байта [] в файл изображения - PullRequest
0 голосов
/ 13 декабря 2018

Это сообщение является продолжением: ImageIO.read не может прочитать ByteArrayInputStream (обработка изображений)

Как и в случае с OP, я получаю нулевой указатель всякий раз, когда пытаюсьчитать из моего ByteArrayInputStream (как и должно быть, как объяснено в верхнем ответе).Заметив это, я реализовал код из ответа @haraldK из поста выше, чтобы исправить эту проблему, но столкнулся с другой проблемой.У меня есть следующий код:

byte[] imageInByteArr = ...

// convert byte array back to BufferedImage
int width = 1085;
int height = 696;
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );

try {
    ImageIO.write(convertedGrayScale, "jpg", new File("C:\\test.jpg"));
}
catch (IOException e) {
    System.err.println("IOException: " + e);
}

При выполнении я сталкиваюсь с ошибкой java.lang.ArrayIndexOutOfBoundsException: null в строке прямо перед блоком try / catch.Моей первой мыслью было, что этот нулевой указатель возник из-за отсутствия файла на моем диске C с именем test.jpg.Я исправил это беспокойство, но у меня все та же проблема с нулевым указателем на convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );.Почему это происходит?

В другой заметке, кроме написания файла, использующего ImageIO, есть ли другой способ для меня преобразовать байт [] в визуальное представление изображения?Я попытался просто напечатать массив в файл и сохранить его как «.jpg», но файл не открывается.Любые предложения помогут.Подводя итог, я хочу преобразовать байт [] в изображение и сохранить его ИЛИ отобразить в браузере.Что проще / выполнимо.

1 Ответ

0 голосов
/ 13 декабря 2018

кажется, что ваш imageInByteArr слишком короткий.Мне удалось получить ту же ошибку, которую вы получаете от этой

public static void main(String[] args) {
    int width = 1085;
    int height = 696;
    byte[] imageInByteArr = new byte[width ];
    BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr);

}

при использовании width*height для размера imageInByteArr или чего-либо большего, я не получаю ошибку, но когда она меньше данных, которые вы пытаетесьобновить его выдает исключение.

...