有一个使用swing的传统应用程序,它会在不同时间为各种目的生成各种窗口。我想知道的是,是否有可能获得每个窗口的“屏幕截图”,而无需在我的操作系统上实际浏览屏幕截图实用程序。我知道这是可能某种方式,但我想知道它是否是swing / java很好的支持?我想通过这个应用程序加载一个文件,迭代生成的窗口,并在某处写出图像。
答案 0 :(得分:3)
我知道有两种方法可以做到这一点,一种是想要捕捉窗户的装饰品(顶部的按钮和其他类似的内容),如果你不想拍摄的话,可以选择一种。吨。
如果您不想捕捉装饰品,您可以简单地将其绘制成图像,如下所示:
public static void saveImage(JFrame frame, File target, String extension) throws IOException{
BufferedImage img = new BufferedImage(frame.getContentPane().getWidth(),
frame.getContentPane().getHeight(),
BufferedImage.TYPE_INT_RGB);
frame.getContentPane().paint(img.getGraphics());
ImageIO.write(img, extension, target);
}
这将创建所需大小的新图像,将内容绘制到其中,然后保存。
如果您想捕获所有内容,可以使用Robot
类createScreenCapture
method,如下所示:
public static void saveImage(JFrame frame, File target, String extension) throws IOException{
Point pos = frame.getLocationOnScreen();
Dimension size = frame.getSize();
Rectangle rect = new Rectangle(pos.x, pos.y, size.width, size.height);
Robot robot = new Robot();
BufferedImage bi = robot.createScreenCapture(rect);
ImageIO.write(bi, extension, target);
}
至于将每个窗口设置为屏幕截图,您可以手动跟踪所需的窗口,或使用Frame.getFrames()
或Window.getWindows()
获取所有活动窗口的数组,然后迭代它们。< / p>
答案 1 :(得分:0)
Sikuli非常整洁,它允许您根据图像识别自动执行任何操作。他们的网站:www.sikuli.org。并且在运行您编写脚本的自动化任务时可以截取屏幕截图:How to take screenshot with sikuli
我没有加入sikuli,我过去只是使用它(在swing GUI上自动化测试)。他们网站上的描述:
Sikuli自动化您在屏幕上看到的任何内容。它使用图像 识别和控制GUI组件。这很有用 无法轻松访问GUI的内部或源代码。