有没有办法无头地截取摆动(或awt)窗口?

时间:2016-07-11 02:54:35

标签: java swing awt

有一个使用swing的传统应用程序,它会在不同时间为各种目的生成各种窗口。我想知道的是,是否有可能获得每个窗口的“屏幕截图”,而无需在我的操作系统上实际浏览屏幕截图实用程序。我知道这是可能某种方式,但我想知道它是否是swing / java很好的支持?我想通过这个应用程序加载一个文件,迭代生成的窗口,并在某处写出图像。

2 个答案:

答案 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);
}

这将创建所需大小的新图像,将内容绘制到其中,然后保存。

如果您想捕获所有内容,可以使用RobotcreateScreenCapture 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的内部或源代码。