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

Need to save the frame as an image in the specified folder during save

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

只需使用 JFileChooser。

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

ImageIOclass有以下写法:

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 输出) 使用支持给定格式的任意 ImageWriter 将图像写入 OutputStream。

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

然后记得 flush() 和 close() 你的流。

编辑:答案

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