保存期间需要将帧保存为指定文件夹中的图像

时间:2015-10-01 20:33:39

标签: java graphics frame bufferedimage javax.imageio

我想将帧图像存储在单击保存按钮时指定的文件名中,现在我将其保存在计算机的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 个答案:

答案 0 :(得分:1)

只需使用JFileChooser。

显示JFileChooser的调用会阻塞该线程,直到用户选择一个文件夹为止,因此您可以使用相同的方法直接使用所选文件。

ImageIO类具有以下写入方法:

static boolean write(RenderedImage im,String formatName,File output) 使用支持给定格式的任意ImageWriter将图像写入文件。

static boolean write(RenderedImage im,String formatName,ImageOutputStream输出) 使用支持给定格式的任意ImageWriter将图像写入ImageOutputStream。

static boolean write(RenderedImage im,String formatName,OutputStream output) 使用支持给定格式的任意ImageWriter将图像写入OutputStream。

在您的情况下,BufferedWriter是您可以使用的OutputStream。

记得在那之后刷新()并关闭()你的溪流。

编辑:答案

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());
                }