获取Java applet的屏幕截图

时间:2011-08-25 21:22:32

标签: java applet screenshot automated-tests

我正在尝试使用Java Robot类对我所参与的各种项目进行一些自动化测试,并且我在获取任何非全屏程序的屏幕截图时遇到了一些麻烦。

对于全屏程序,我只使用:

  

Dimension dim = Toolkit.getDefaultToolkit()。getScreenSize();   BufferedImage image = robot.createScreenCapture(dim);

我知道我无法获得特定窗口的截图,因为我非常确定Java不知道每个窗口在屏幕上的位置(因为它的操作系统特定)。

但是我希望我仍然可以在applet-viewer中获得applet的screeenshot,因为窗口以这种或那种方式连接到JVM。

那么,关于这是否可行的任何想法?如果是这样,我该如何去做呢?

2 个答案:

答案 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小程序中的一般设计模式,以防止闪烁和更新视图的其他问题。