我有一个桌面应用程序,在JFrame中有重量级组件(JxBrowser)。如何从GUI创建快照并将其保存为例如png文件?
注意:使用Graphics2d和Component.paint()/ paintAll()/ print / printAll的方法仅适用于轻量级组件。
任何答案都赞赏!
修改
我已经尝试过这个:
robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
但我希望捕获内部组件......
修改
这种情况似乎趋同于这个解决方案:如果我的JFrame中有一个更大的重量级组件,那么它在JScrollPane上呈现,那么就没有其他方法以编程方式获取它的快照然后滚动它/截屏它有screencapture吗?
答案 0 :(得分:2)
我的名字是Roman,我是TeamDev的开发人员。
JxBrowser组件它是一个重量级组件,嵌入了一个本机mozilla窗口来显示网页。要从JxBrowser组件获取完整网页的屏幕截图,您可以真正使用Java Robot功能和网页滚动。对于小型网页,这个解决方案是可以的。但是接收大型网页的屏幕截图将花费大量时间。另请注意,Java Robot只允许捕获屏幕。因此,如果某个窗口将出现在JxBroser组件上,那么它也将被捕获。
我们已经开始根据JxBrowser项目开发此功能。允许捕获包括其不可见部分的完整网页的解决方案基于Mozilla内部的东西。您将能够捕获完整的网页并将其保存为图像非常容易。
我们将在JxBrowser库的下一个版本中添加此功能,但尚未定义发布日期。如果您愿意,可以订阅TeamDev的RSS提要:http://support.teamdev.com/blogs/feeds/tags/company_news
或者只是让我知道,我会在此功能可用时通知您。如果您有任何其他问题,请与我们联系。我很乐意提供帮助。
此致 罗马
答案 1 :(得分:1)
你的意思是编程?
怎么样?
Point p = yourAwtComponent.getLocationOnScreen();
int w = yourAwtComponent.getWidth();
int h = yourAwtComponent.getHeight();
Rectangle rectangle = new Rectangle( p.x, p.y, w, h );
Image image = robot.createScreenCapture(rectangle);
然后是这样的事情:
ImageIO.write( image, "png", file );
答案 2 :(得分:1)
JxBrowser API提供的功能允许将整个网页保存为PNG图像。请参阅sample。
答案 3 :(得分:0)
您也可以尝试通过实现此功能来创建屏幕截图:
int width = frameContainer.getWidth();
int height = frameContainer.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
frameContainer.paint(g2);
return image;