2015-11-07 132 views
-1

我正在尝试将缓冲图像写入附加下一个缓冲图像字节的文件中。我有以下代码为其引发了一些运行时异常。当我运行此代码时,我收到以下异常。为什么和必须改变什么?将图像写入文件

import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.OutputStream; 
    import java.awt.image.BufferedImage; 
    import java.io.ByteArrayInputStream; 
    import java.io.ByteArrayOutputStream; 
    import java.io.File; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import javax.imageio.ImageIO; 






    public class FileT 
    { 
     public static void main(String[] args) 
     { 
      try { 
       BufferedImage originalImage = ImageIO.read(new File("ani.jpg")); 
       int i=0,c=0; 
       // convert BufferedImage to byte array 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       ImageIO.write(originalImage, "jpg", baos); 
       baos.flush(); 
       byte[] imageInByte = baos.toByteArray(); 
       byte[] copybuf = new byte[1024]; 
       baos.close(); 

       while(i<imageInByte.length) 
       { 
        copybuf[c]=imageInByte[i]; 
        c++; 

        if(i%1023==0) 
         { 
         // convert byte array back to BufferedImage 
         InputStream in = new ByteArrayInputStream(copybuf); 
         BufferedImage bImageFromConvert = ImageIO.read(in); 
    ImageIO.write(bImageFromConvert, "jpg", new FileOutputStream(new File("ani1.jpg"),true)); 

         } 
         copybuf = new byte[1024]; 
         i++; 

      } 
      } 
      catch (IOException e) { 
       System.out.println(e.getMessage()); 
      } 
      } 
    } 
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:1578) 
    at FileT.main(FileT.java:45) 
+0

'copybuf = new byte [1024];'... while while if(i%1023 == 0)',我想你应该重做你在这里发生的一切。这段代码让我很害怕 –

+0

请正确缩进你的代码(如果你不想手动执行,请使用你的编辑器/ IDE选项)。 'FileT'中的哪一行是'45'? – Pshemo

+0

这是行:ImageIO.write(bImageFromConvert,“jpg”,new FileOutputStream(new File(“ani1.jpg”),true)); –

回答

-1
if(i%1023==0){ 
// convert byte array back to BufferedImage 
    InputStream in = new ByteArrayInputStream(copybuf); 
    BufferedImage bImageFromConvert = ImageIO.read(in); 
    ImageIO.write(bImageFromConvert, "jpg", new FileOutputStream(new File("ani1.jpg"),true)); 
} 
copybuf = new byte[1024]; 
i++; 

在此代码中,你可能想改变新的FileOutputStream中(新的文件())待浇铸到ImageOutputStream的

这是很难从以确定您的质疑你需要什么,但我认为这会解决它。如果它不只是留下评论,我会尝试修复它

+0

ImageIO.write(bImageFromConvert,“jpg”,new FileOutputStream(new File(“ani1.jpg”),true));这是我得到错误的线。你能告诉我到底需要改变什么吗?我不明白 –

+0

检查重复的问题,它有你的答案 – Kore

+0

你能告诉我这里的问题吗? –