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