我有一个JPanel,它使用Graphic2D显示图形。这很好用。我现在希望能够将图表保存到文件中。到目前为止,我能让它工作的唯一方法是创建一个BufferedImage和我写入JPanels Graphic2D对象的所有内容,我写入属于BufferedImage的Graphic2D对象,然后从BufferedImage执行PrintAll。 所以我有如下代码:
g.setFont(g.getFont().deriveFont(fontSize));
g.drawString(text, xPos, yPos);
g.setFont(saveFont);
bG.setFont(g.getFont().deriveFont(fontSize));
bG.drawString(text, xPos, yPos);
bG.setFont(saveFont);
其中g是JPanel的Graphic2D对象 和bG是BufferedImage的Graphic2D对象
当然,这不是最好的方法。有没有办法使用属于JPanel的Graphic2D对象为BufferedImage生成Graphic2D对象?
答案 0 :(得分:0)
我提取了一个方法,比如绘制图表的paintGraph(Graphics2D g)
。然后从两个位置调用它。一旦使用JPanel
paintComponent(..)
方法,一次使用" saveToFile"方法,使用您的BufferedImage
Graphics2D
实例。
如果您的图表绘制代码可以调整大小,则可能需要Dimension
作为方法的第二个参数,该参数可以是面板或图像的大小。
在代码中:
void paintGraph(Graphics2D g, Dimension size) {
g.setFont(g.getFont().deriveFont(fontSize));
g.drawString(text, xPos, yPos);
g.setFont(saveFont);
// ...etc
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
paintGraph((Graphics2D) g, getSize());
}
void saveToFile(File f) {
BufferedImage image = new BufferedImage(512, 512, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGaphics();
paintGraph(g, new Dimension(image.getWidth(), image.getHeight());
g.dispose();
ImageIO.write(image, "PNG", f);
}