将JPanel转换为图像

2022-09-02 23:41:28

有没有办法将JPanel(尚未显示)转换为BufferedImage?

谢谢

杰夫


答案 1

从 BufferedImage 中,您可以创建一个图形对象,您可以使用该对象在 JPanel 上调用 paint,如下所示:

public BufferedImage createImage(JPanel panel) {

    int w = panel.getWidth();
    int h = panel.getHeight();
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    panel.paint(g);
    g.dispose();
    return bi;
}

您可能需要确保先设置面板的大小。


答案 2

基本上,我正在构建一个需要写入图像但不显示的组件。

ScreenImage解释了如何做你想做的事。


屏幕图像的相关部分.java(略有编辑)。 强制所有按钮都显示在图像中。layoutComponent

/**
 * @return Renders argument onto a new BufferedImage
 */
public BufferedImage createImage(JPanel panel, int width, int height) {
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = bi.createGraphics();
    panel.setSize(width, height); // or panel.getPreferedSize()
    layoutComponent(panel);
    panel.print(g);
    g.dispose();
    return bi;
}

private void layoutComponent(Component component) {
    synchronized (component.getTreeLock()) {
        component.doLayout();

        if (component instanceof Container) {
            for (Component child : ((Container) component).getComponents()) {
                layoutComponent(child);
            }
        }
    }
}

推荐