2017-01-28 4 views
0

я использовал этот код, чтобы преобразовать массив битов BufferedImage но его дает ошибкуИсключение в потоке «основного» java.lang.IllegalArgumentException: изображение == NULL

ByteArrayInputStream bais = new ByteArrayInputStream(arr);  
    BufferedImage finale=new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 

    finale=ImageIO.read(bais); 
    File outputfile = new File("C:\\Users\\Divya Prakash\\Desktop\\image32.jpg"); 
    ImageIO.write(finale, "jpg", outputfile); 

ошибка

Exception in thread "main" java.lang.IllegalArgumentException: image == null! 
    at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925) 
    at javax.imageio.ImageIO.getWriter(ImageIO.java:1592) 
    at javax.imageio.ImageIO.write(ImageIO.java:1520) 
    at imgpros.Imgpros.main(Imgpros.java:113) 
Java Result: 1 

Как я могу удалить ошибку?

+0

Очевидно, ваше изображение в какой-то момент становится нулевым. Отладка, чтобы узнать, почему. – Carcigenicate

+1

Кроме того, ваша вторая строка ничего не делает, так как вы сразу же перезаписываете ссылку с помощью 'read'. – Carcigenicate

+0

Похоже, что зарегистрированный 'ImageReader' не может читать ваш' bais'-stream. – Calculator

ответ

1

Как видно из одного комментария, ImageIO, вероятно, не может читать ByteInputStream. Или, возможно, ваш массив не может быть преобразован в ByteInputStream. Таким образом, это возвращает null. Попробуйте:

System.out.println(bais==null); 

Если это печатает true, вы можете:

  • а) искать другой способ преобразовать ваш массив в BufferedImage

    Для этого, я хотел бы предложить, чтобы определить ширину и высота для вашего BufferedImage:

    finale=new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); 
    

    Затем заполнить его с точками из вашего массива:

    for (int x = 0 ; x < width ; x=x+1) { 
        for (int y = 0 ; y < height ; y=y+1) { 
         finale.setRGB(x,y,arr[y*w+x]); 
        } 
    } 
    

    Если ее целочисленный массив ...

  • б) Убедитесь, что ImageIO может обрабатывать ваши ByteInputStream.

    • Попробуйте это: InputStream bais = new ByteArrayInputStream(arr);

Надеется, что это помогает!

Смежные вопросы