java - 保存时需要将帧作为图像保存在指定文件夹中

标签 java graphics frame bufferedimage javax.imageio

我想将帧图像存储在单击保存按钮时指定的文件名中,现在我将其作为“Screen.png”保存在计算机的 E 文件夹中,但我希望用户提供指定文件名并将图像保存到指定文件夹的选项。我该怎么做?

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 的 show 的调用会阻塞线程,直到用户选择文件夹,因此您可以通过相同的方法直接使用所选文件。

ImageIO 类具有以下写入方法:

静态 boolean 写入(RenderedImage im,字符串格式名称,文件输出) 使用支持给定格式的任意 ImageWriter 将图像写入文件。

静态 boolean 写入(RenderedImage im,字符串格式名称,ImageOutputStream 输出) 使用支持给定格式的任意 ImageWriter 将图像写入 ImageOutputStream。

静态 boolean 写入(RenderedImage im,字符串格式名称,OutputStream 输出) 使用支持给定格式的任意 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());
                }

关于java - 保存时需要将帧作为图像保存在指定文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32896381/

相关文章:

c++ - OpenGL 渲染到纹理透明度问题

iOS:在 iPad 模态视图中获取键盘点的顶部?

android - Camera addCallbackBuffer 机制是如何工作的?

Java Netbeans 显示 opencv3 错误 "Error: Could not find or load main class library"

java - 是否可以使用不同类型参数将谓词与 `and` 链接起来?

java - 包含另一个集合的克隆集合

java - 如何将 ActionBar 标志设置为文本(TextView)?

android - Play 商店中的促销图片和特色图片有什么区别

opengl - 这个简单的FxAA如何工作?

JQuery 框架 UI 插件