如何从 java 中的非轻量级组件获取 BufferedImage?
Posted
技术标签:
【中文标题】如何从 java 中的非轻量级组件获取 BufferedImage?【英文标题】:How to get a BufferedImage from a non light weight Component in java? 【发布时间】:2011-04-21 09:55:48 【问题描述】:我使用以下方法尝试从非轻量级组件中获取 BufferedImage,但是我得到了一个黑色图像,所以它不起作用,我传递给它的组件是来自 JDIC 的 WebBrowser 对象,它是一个非轻量级组件:
public static BufferedImage getComponentImage(Component aComponent,Rectangle region) throws IOException
BufferedImage image= new BufferedImage(aComponent.getWidth(),aComponent.getHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D g2d=image.createGraphics();
SwingUtilities.paintComponent(g2d,aComponent,aComponent.getParent(),region);
g2d.dispose();
/*
Graphics g = image.getGraphics();
aComponent.paint(g);
// aComponent.paintAll(g);
// SwingUtilities.paintComponent(g,aComponent,aComponent.getParent(),region);
g.dispose();
*/
return image;
我也试过 cmets 中的线,它们也不起作用,那么如何在 java 中从 非轻量级组件 中捕获 BufferedImage 呢?
【问题讨论】:
【参考方案1】:SwingUtilities.paintComponent 的文档说“如果组件不是轻量级的,就会发生糟糕的事情:崩溃、异常、绘画问题......”所以你的结果不会出乎意料。
CellRenderPane 似乎没有这样的限制:你可以试试。或者,您可以尝试直接在组件上调用 paint(),但这通常会出现问题,除非组件正确嵌入到组件层次结构中。
【讨论】:
谢谢,但就我而言,如何使用 CellRenderPane ?任何示例代码?以上是关于如何从 java 中的非轻量级组件获取 BufferedImage?的主要内容,如果未能解决你的问题,请参考以下文章