gpt4 book ai didi

Java Paint 组件转换成位图

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:36 25 4
gpt4 key购买 nike

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

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

带输出的完整示例:

Resulting image

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"));
}

关于Java Paint 组件转换成位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com