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()数组?急!!!!