Я делаю программу, которая получает данные об изображении в массиве байтов с сервера. Я конвертирую эти данные в 24-битный формат BMP (будь то его jpeg, png, bmp или 8-24-32bpp). Во-первых, я сохраняю его на своем HD, а затем загружаю его в значок JLabel. Работает отлично, хотя есть некоторые случаи, в которых я получаю следующее исключение:Преобразование и отображение изображения из массива байтов
java.io.EOFException at
javax.imageio.stream.ImageInputStreamImpl.readFully(ImageInputStreamImpl.java:353) at
com.sun.imageio.plugins.bmp.BMPImageReader.read24Bit(BMPImageReader.java:1188) at
com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:843) at
javax.imageio.ImageIO.read(ImageIO.java:1448) at
javax.imageio.ImageIO.read(ImageIO.java:1308)
Для этой линии (второй)
File imgFile = new File("d:/image.bmp");
BufferedImage image = ImageIO.read(imgFile);
В этих случаях:
- изображение делает не загружайте в JLabel, но его можно найти на моем HD
- преобразование не является правильным, потому что что-то «проскальзывает»
- картина как при использовании курсива в текстовом документе
Во-первых, я думал, что, может быть, BPP является проблемой, то я подумал, что, может быть, картины слишком большие, но у меня есть случаи, это работает, и случаи это не для обоих предложений. Я немного застрял здесь и буду рад за идеи.
Вы создали эти изображения? Все, о чем я могу думать, это то, что они созданы с некоторым форматом BMP, который ImageIO не поддерживает. Возможно, если вы попытаетесь отредактировать изображения и сохраните их снова. – Piro
Я думаю, проблема в том, что некоторые фотографии не имеют байтов EOF, и именно поэтому вы получаете 'java.io.EOFException'. Я столкнулся с той же проблемой в формате jpeg. Имеет смысл, если вы считаете, что метаданные файла содержат информацию о длине файла, и поэтому EOF не понадобится. Этот факт объясняет, почему ваши файлы можно найти в вашем HD (и даже можно открыть, я думаю), но вы получаете исключение в java. – dic19
Проверьте [это] (http: // stackoverflow.com/questions/12288813/exception-java-awt-color-cmmexception-invalid-image-format-throw-when-resizi/16858161 # 16858161), есть объяснение моего опыта работы с изображениями jpeg, которые, я надеюсь, будут полезно. – dic19