我有一个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的JPanel对象,bG是BufferedImage的Graphic2D对象。
当然这不可能是最好的方法。是否有一种方法可以使用属于Graphic2D的JPanel对象来为BufferedImage生成Graphic2D对象?
发布于 2017-04-02 15:21:22
我会提取一种方法,比如绘制图形的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);
}https://stackoverflow.com/questions/43166594
复制相似问题