Java Paint 组件转换成位图

Posted

技术标签:

【中文标题】Java Paint 组件转换成位图【英文标题】:Java Paint component into bitmap 【发布时间】:2011-05-13 19:27:01 【问题描述】:

我需要在位图中绘制一个组件及其所有子组件的内容。 如果我想绘制整个组件,以下代码可以完美运行:

public void printComponent(Component c, String format, String filename) 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);

    // Render the component and all its sub components
    c.paintAll(image.getGraphics());

    // 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));

但我没有找到仅绘制此组件的 区域 的方法。 有什么想法吗?

【问题讨论】:

【参考方案1】:

你需要这样翻译:

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);

Graphics g = image.getGraphics();
g.translate(-100, -100);

c.paintComponent(g);

g.dispose();

带有输出的完整示例:

public static void main(String args[]) throws Exception 

    JFrame frame = new JFrame("Test");
    frame.add(new JTable(new DefaultTableModel() 
        @Override
        public int getColumnCount() 
            return 10;
        
        @Override
        public int getRowCount() 
            return 10;
        
        @Override
        public Object getValueAt(int row, int column) 
            return row + " " + column;
        
    ));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);

    BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
    Graphics g = image.getGraphics();
    g.translate(-100, -100);

    frame.paintComponents(g);

    g.dispose();

    ImageIO.write(image, "png", new File("frame.png"));

【讨论】:

它不会从位图中的 0,0 点开始绘制组件的区域! 我设置的剪辑是一个例子,您需要将此区域设置为对您有用的东西。 如果我想从点 (100,100) 开始绘制区域,大小为 100*100,我需要创建一个大小为 100*100 的位图,那么参数是什么setClip 方法? 再次修复(删除剪辑)。【参考方案2】:

Screen Image 类为您简化了这个过程。

【讨论】:

以上是关于Java Paint 组件转换成位图的主要内容,如果未能解决你的问题,请参考以下文章

VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!

java调用com组件将office文件转换成pdf

matlab将eps文件转换成位图

怎么把电脑桌面上的CAD图纸转换成BMP格式图纸?

java 有关word,excel,pdf转换成html 有几种方式

CorelDRAW里如何将图片转换成单线条图形(只要图形轮廓)