繁体   English   中英

有没有一种方法可以复制JPanel的Graphic2D实例以为BufferedImage创建Graphic2D?

[英]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)来绘制图形。 然后您从两个位置调用它。 一次是使用JPanelpaintComponent(..)方法,一次是使用BufferedImageGraphics2D实例,通过“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM