[英]Is there a way of copying a JPanel's Graphic2D instance to make a Graphic2D for a BufferedImage?
我有一个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对象?
我提取了一种方法,例如paintGraph(Graphics2D g)
来绘制图形。 然后您从两个位置调用它。 一次是使用JPanel
的paintComponent(..)
方法,一次是使用BufferedImage
的Graphics2D
实例,通过“ saveToFile”方法。
如果您的图形绘图代码是可调整大小的,则可能需要将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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.