Java将组件绘制成位图
我需要在位图中绘制组件及其所有子组件的内容。 如果我想绘制整个组件,下面的代码非常有效:Java将组件绘制成位图,java,components,bitmap,paint,Java,Components,Bitmap,Paint,我需要在位图中绘制组件及其所有子组件的内容。 如果我想绘制整个组件,下面的代码非常有效: 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 BufferedI
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));
}
但是我没有找到一种方法来只绘制这个组件的区域。
有什么想法吗?你需要这样翻译:
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开始绘制组件的区域!我设置的剪辑就是一个例子,您需要将此区域设置为对您有用的值。如果我想从点(100100)开始绘制区域,并且siez为100*100,我需要创建一个大小为100*100的位图,那么setClip方法的参数是什么?再次修复解决方案(删除剪辑)。