我正在尝试使用Java Robot类对我所参与的各种项目进行一些自动化测试,并且我在获取任何非全屏程序的屏幕截图时遇到了一些麻烦。
对于全屏程序,我只使用:
Dimension dim = Toolkit.getDefaultToolkit()。getScreenSize(); BufferedImage image = robot.createScreenCapture(dim);
我知道我无法获得特定窗口的截图,因为我非常确定Java不知道每个窗口在屏幕上的位置(因为它的操作系统特定)。
但是我希望我仍然可以在applet-viewer中获得applet的screeenshot,因为窗口以这种或那种方式连接到JVM。
那么,关于这是否可行的任何想法?如果是这样,我该如何去做呢?
答案 0 :(得分:2)
假设您有对applet(或任何其他组件)的引用,则创建一个屏幕外的Graphics2D实例并让组件绘制自己。
Component applet = ...; // the applet
Dimension size = applet.getSize();
BufferedImage offScreenImage = (BufferedImage) applet.createImage(size.width, size.height);
Graphics2D g2 = offScreenImg.createGraphics();
g2.setBackground(applet.getBackground());
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.clearRect(0, 0, size.width, size.height);
applet.paint(g2);
// now you can use BufferedImage as before
键是Component.createImage,它会为双缓冲创建一个屏幕外图像。
答案 1 :(得分:0)
+1上面的答案,你应该使用双缓冲作为java小程序中的一般设计模式,以防止闪烁和更新视图的其他问题。