2015-10-01 3 views
0

Я хочу сохранить изображение кадра в имени файла, которое указывается при нажатии кнопки сохранения, прямо сейчас я получаю его в папке E моего компьютер как «Screen.png», но я хочу, чтобы пользователь дал возможность указать имя файла и сохранить изображение в указанной папке. как мне это сделать?Необходимо сохранить кадр в качестве изображения в указанной папке во время сохранения

JFileChooser save = new JFileChooser(); 
     int option = save.showSaveDialog(save); 
     if (option == JFileChooser.APPROVE_OPTION) { 
      try { 

       BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB); 
       BufferedWriter outFile = new BufferedWriter(new FileWriter(save.getSelectedFile().getPath())); 
       frame.paint(awtImage.getGraphics()); 
       try { 
        ImageIO.write(awtImage, "png", new File("E://Screen.png")); 
        System.out.println("panel saved as image"); 
       } catch (Exception evt) { 
        System.out.println("panel not saved" + evt.getMessage()); 
       } 

      } catch (Exception ex) { // again, catch any exceptions and... 
       System.out.println(ex.getMessage()); 
      } 
     } 

ответ

1

Просто используйте JFileChooser.

Вызов для отображения JFileChooser блокирует поток до тех пор, пока пользователь не выберет папку, поэтому вы можете использовать выбранный файл прямо по тому же методу.

ImageIO класс имеет следующие методы записи:

статической булеву запись (RenderedImage IM, строка FORMATNAME, выходной файл) записывает изображение с помощью произвольного ImageWriter, который поддерживает данный формат в файл.

static boolean write (RenderedImage im, String formatName, ImageOutputStream output) Записывает изображение с помощью произвольного ImageWriter, который поддерживает данный формат для ImageOutputStream.

static boolean write (RenderedImage im, String formatName, OutputStream output) Записывает изображение с помощью произвольного ImageWriter, который поддерживает данный формат для OutputStream.

В вашем случае BufferedWriter - это OutputStream, который вы можете использовать.

И не забудьте сбросить() и закрыть() ваши потоки после этого.

EDIT: ОТВЕТ

BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB); 
       BufferedWriter outFile = new BufferedWriter(new FileWriter(save.getSelectedFile().getPath())); 
       frame.paint(awtImage.getGraphics()); 
       try { 
        ImageIO.write(awtImage, "png", new File("E://Screen.png")); 
        System.out.println("panel saved as image"); 
       } catch (Exception evt) { 
        System.out.println("panel not saved" +  evt.getMessage()); 
       } 

Должно быть:

BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB); 
       File selected = save.getSelectedFile(); 
       frame.paint(awtImage.getGraphics()); 
       try { 
        ImageIO.write(awtImage, "png", selected); 
        System.out.println("panel saved as image at: " + selected.getPath()); 
       } catch (Exception evt) { 
        System.out.println("panel not saved" +  evt.getMessage()); 
       } 
+0

Я использую JFileChooser в начале этого кода и конкретизированы «BufferedWriter Outfile = новый BufferedWriter (новый FileWriter (save.getSelectedFile() .getPath()));» но как использовать «outFile» в imageIO для записи в файл? – Mitesh

+0

Извините .. не заметил, проверьте отредактированный ответ –

+0

Я обновил код сейчас. пожалуйста, проверьте. – Mitesh