如何从JPanel加载/保存图像

Jam*_*own 4 java swing image jpanel javax.imageio

我错过了导出文件代码,但我不知道我需要添加什么.我在JPanel - >面板中有一个绘制的图像,并希望将该图像保存到我的桌面.我需要添加什么?

JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(panel);
Run Code Online (Sandbox Code Playgroud)

我已将以下代码添加到paintComponent方法中:

bi = new BufferedImage(panel.getSize().width,panel.getSize().height,
          BufferedImage.TYPE_INT_ARGB);
g = bi.createGraphics();
Run Code Online (Sandbox Code Playgroud)

然后保存按钮执行此操作...我还缺少什么?或者做得不正确.

JFileChooser chooser = new JFileChooser();
chooser.showSaveDialog(panel);

try{ImageIO.write(bi,"png",new File("test.png"));}catch (Exception ex) {}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 6

你的问题是缺少一些重要的信息:你是如何在JPanel上画画的?在我看来,聪明的方法是绘制到BufferedImage,然后简单地将BufferedImage保存到文件中ImageIO.write(...)

编辑
你说:

我只是将多边形绘制到扩展JPanel的类上.我通过paintComponent方法创建它们.

同样,我建议您通过获取其Graphics上下文,使用此Graphics对象绘制到图像,然后处理Graphics对象,将它们绘制到BufferedImage.您可以paintComponent(...)通过调用在JPanel的方法中显示BufferedImage g.drawImage(...).然后,如果要再次保存绘图,只需保存BufferedImage即可.

  • *"聪明的方法是绘制一个BufferedImage,然后简单地保存BufferedImage"*参见[this answer](http://stackoverflow.com/questions/12683533/drawing-a-rectangle-that-wont-disappear -in-next-paint/12683632#12683632)举个例子.或者,为了获得面板的快照(不太可取),请参阅[此答案](http://stackoverflow.com/questions/5853879/java-swing-obtain-image-of-jframe/5853992#5853992). (2认同)