繁体   English   中英

有没有办法无头地截图一个秋千(或awt)窗口?

[英]Is there a way to headlessly screenshot a swing (or awt) window?

有一个使用swing的旧版应用程序,它会在不同时间产生各种目的的各种窗口。 我想知道的是,是否有可能获得每个窗口的“屏幕快照”,而不必实际通过操作系统上的屏幕快照实用程序。 我知道这是有可能的 ,但是我想知道swing / java是否很好地支持了它? 我很想通过此应用程序加载文件,遍历生成的窗口,然后在某个位置写出图像。

我知道有两种方法可以执行此操作,一种方法是捕获窗口的装饰(顶部的按钮以及其他类似内容),另一种方法则不需要。

如果您不想捕获装饰,则可以将其绘制为图像,如下所示:

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方法 ,如下所示:

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()获取所有活动Window.getWindows()的数组,然后对其进行迭代。

Sikuli非常简洁,它允许您基于图像识别使任何东西自动化。 他们的网站: www.sikuli.org 它可以在运行您编写的自动化任务时截取屏幕截图如何使用sikuli截取屏幕截图

我完全不隶属于sikuli,过去我只是使用它(在摆动的GUI上自动执行测试)。 他们网站上的说明:

Sikuli可自动执行您在屏幕上看到的所有操作。 它使用图像识别来识别和控制GUI组件。 当无法轻松访问GUI的内部或源代码时,此功能很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM