2015-04-12 2 views
0

Я разрабатываю приложение генератора QR в java.This является генерирующий код,Как сохранить файл изображения в java?

try { 

      ByteArrayOutputStream out = QRCode.from(txt_input.getText()).to(ImageType.PNG).stream(); 
      ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 

      BufferedImage image = ImageIO.read(in); 

      lbl_output.setIcon(null); 
      lbl_output.setIcon(new ImageIcon(image)); 

      String pic = "image"; 

     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, " Please enter valid text !"); 
     } 

После создания QR-изображения Мне нужно сохранить it.So Я использовал этот код,

JFileChooser save = new JFileChooser(); 
int response = save.showSaveDialog(null); 

      if (response == JFileChooser.APPROVE_OPTION) { 
       try { 
        File fileToSave = new File(pic + ".png"); 
        ImageIO.write(image, "PNG", fileToSave); 

       } catch (Exception e) { 

       } 
      } 

Но есть исключение, как,

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) 
+4

не оставляют поймать блок empty.use 'printStackTrace(); ', чтобы увидеть, если произошла ошибка. –

+0

Какое значение имеет «образ»? – immibis

+1

@OptimasePrime 'BufferedImage image = ImageIO.read (in);' - вы знаете, что объявляет новую переменную под названием «изображение», которая отличается от любых других переменных, которые называются «образ», правильно? – immibis

ответ

1

там нет причин использовать ImageIO здесь, потому что ваш QRCode класс уже записывает изображение в PNG для массива байтов.

Вместо этого просто скопируйте байты в нужный файл.

т.е .:

ByteArrayOutputStream out = QRCode.from(txt_input.getText()).to(ImageType.PNG).stream(); 
byte[] bytes = out.toByteArray(); 

...

FileChooser save = new JFileChooser(); 
int response = save.showSaveDialog(null); 

if (response == JFileChooser.APPROVE_OPTION) { 
    File fileToSave = new File(pic + ".png"); 

    // Try-with-resource 
    try (OutputStream out = new FileOutputStream(fileToSave)) { 
     out.write(bytes); 
     out.flush(); 
    } 
} 
Смежные вопросы