首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种复制JPanel的Graphic2D实例来为BufferedImage创建Graphic2D的方法?

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

Stack Overflow用户
提问于 2017-04-02 09:08:08
回答 1查看 20关注 0票数 0

我有一个JPanel,它使用Graphic2D显示一个图形。这个很好用。现在,我希望能够将图形保存到文件中。到目前为止,我能让它工作的唯一方法是创建一个BufferedImage和我写到JPanels Graphic2D对象的所有东西,我写到属于BufferedImage的Graphic2D对象,然后从BufferedImage执行一个PrintAll。所以我有如下代码:

代码语言:javascript
复制
    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对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 15:21:22

我会提取一种方法,比如绘制图形的paintGraph(Graphics2D g)。然后从两个位置调用它。一次来自JPanelpaintComponent(..)方法,一次在"saveToFile“方法中,使用BufferedImageGraphics2D实例。

如果图形绘制代码是可调整大小的,则可能需要一个Dimension作为方法的第二个参数,即面板大小或图像大小。

代码:

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43166594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档