【发布时间】:2017-05-17 08:15:58
【问题描述】:
我很困惑 imageIO 是如何工作的,我有这个应用程序:
我希望保存按钮将其在 JFrame 中的所有内容保存为 PNG。 但是,当我尝试此代码时,它不起作用:
ImageIO.write(JFrame, "PNG", new File("filename.png"));
有回复吗?
【问题讨论】:
标签: java swing jframe javax.imageio
我很困惑 imageIO 是如何工作的,我有这个应用程序:
我希望保存按钮将其在 JFrame 中的所有内容保存为 PNG。 但是,当我尝试此代码时,它不起作用:
ImageIO.write(JFrame, "PNG", new File("filename.png"));
有回复吗?
【问题讨论】:
标签: java swing jframe javax.imageio
根据JavaDocs,您需要将ImageIO.write 传递给RenderedImage 的实例。
如果您查看JavaDocs for JFrame,您会发现它没有实现RenderedImage,因此您的问题。
如果您看一下 any example of Image.write,您会发现几乎总是使用 BufferedImage,因为它与 JFrame 不同,确实实现了 RenderedImage
好的,所以问题变成了,“我如何将JFrame 绘制成BufferedImage?”
如果你环顾四周,答案很简单。
BufferedImage img = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
frame.printAll(g2d);
g2d.dispose();
现在,你可以保存它了...
ImageIO.write(img, "png", new File("filename.png"));
【讨论】:
查看Screen Image 类。
它提供重载方法来绘制组件或组件的一部分。然后逻辑将使用:
【讨论】: