java - 获取 Java 小程序的屏幕截图

标签 java applet screenshot automated-tests

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

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

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

我知道我一般无法获取特定窗口的屏幕截图,因为我很确定 Java 不知道每个窗口在屏幕上的位置(因为其操作系统特定)。

但我希望我仍然可以在小程序查看器中获得小程序的屏幕截图,因为该窗口以某种方式连接到 JVM。

那么,关于这是否可能有什么想法吗?如果是这样,我该如何去做呢?

最佳答案

假设您有对小程序(或任何其他组件)的引用,您创建一个离屏 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

key 是Component.createImage它创建一个离屏图像以进行双缓冲。

关于java - 获取 Java 小程序的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197363/

相关文章:

Java——实现忙等待机制

java - 如何使程序将用户输入 20 读取为 20% 或 0.20

java - 使用 OneToMany 的 Spring Boot JPA 自定义查询

java - 想要用等效的 UTF-8 符号替换特殊字符

java - 为什么 Java 告诉我我的小程序包含签名和未签名的代码?

java - 时间不会在 Applet 中重新绘制

java - Netbeans 中 JApplet 文件类型的差异

ios - 在 iOS 模拟器中截屏

java - 在 Java 中获取大量屏幕截图时管理内存使用

android - 在当前 android fragment 中禁用 ScreenShot