将JComponent中的绘图保存到Tiff文件中

时间:2009-10-06 22:36:54

标签: java drawing tiff jcomponent

如何将JComponent中的绘图保存为tiff格式?我只知道如何保存整个Java文件,但我不知道如何保存特定的Jcomponent。帮帮我: - (

EDITED: 谢谢你们,现在我可以将我的绘图保存到Jpeg了。

但是我只想保存其中一个组件? c.paintAll(bufferedImage.getGraphics());似乎保存了整个组件。但是,我只想在没有c.add(new PaintSurface(), BorderLayout.CENTER);的情况下保存此组件panel.add(saveBtn);我该怎么做?感谢。

Container c = getContentPane();
c.setLayout(new BorderLayout());      
Panel panel = new Panel();
panel.add(saveBtn);
c.add("South", panel);
c.setBackground(Color.WHITE);
c.add(new PaintSurface(), BorderLayout.CENTER);

3 个答案:

答案 0 :(得分:1)

这与broschb's解决方案基本相同,只使用正确的语法并实际调用适当的JAI例程。

public void saveComponentAsTiff(Component c, String filename, boolean subcomp) throws IOException {
    saveComponentTiff(c, "tiff", filename, subcomp);
}

public void saveComponent(Component c, String format, String filename, boolean subcomp) throws IOException {
    // Create a renderable image with the same width and height as the component
    BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);

    if(subcomp) {
        // Render the component and all its sub components
        c.paintAll(image.getGraphics());
    }
    else {
        // Render the component and ignoring its sub components
        c.paint(image.getGraphics());
    }

    // Save the image out to file
    ImageIO.write(image, format, new File(filename));
}

可以在此处找到各种功能的文档:

如果您想以tiff以外的格式保存,可以使用ImageIO.getWriterFormatNames()获取当前由JRE加载的所有图像输出格式的列表。

UPDATE:如果您对绘制子组件不感兴趣,可以使用Component.paint(...)替换对Component.paintAll(...)的调用。我已经更改了示例代码以反映这一点。将subcomp设置为true并渲染子组件并将其设置为false将忽略它们。

答案 1 :(得分:0)

您可以通过创建面板大小的缓冲图像来获取组件的缓冲图像或包含图形的面板。然后,您可以将面板内容绘制到缓冲的图像上。然后,您可以使用JAI(Java高级成像)库将缓冲的图像保存为tiff。您必须查看here上的文档。

JComponent component;  //this is your already created component
BufferedImage image = new BufferedImage(component.getWidth(),
                                        component.getHeight(),
                                        Bufferedimage.TYPERGB)

Graphics g = image.getGraphics;
component.paintComponent(g);

语法可能略有偏差,我不是一个想法,但这是一般的想法。然后,您可以使用JAI并将缓冲的图像转换为TIFF。

答案 2 :(得分:0)

ScreenImage类允许您保存任何组件的图像。