Получение скриншота Java-апплета - PullRequest
1 голос
/ 26 августа 2011

Я пытаюсь использовать класс Java Robot для автоматического тестирования различных проектов, над которыми я работал, и у меня возникают проблемы с получением снимков экрана любой программы, которая не работает в полноэкранном режиме.

Для полноэкранных программ, я просто использую:

Размер dim = Toolkit.getDefaultToolkit (). GetScreenSize ();BufferedImage image = robot.createScreenCapture (dim);

Я знаю, что не могу получить снимок экрана с конкретным окном в целом, так как я почти уверен, что Java не знает, где навыводить на экран каждое окно (поскольку оно зависит от ОС).

Но я надеюсь, что смогу получить снимок экрана апплета в средстве просмотра апплетов, так как окно так или иначе связано с JVM.

Итак, есть идеи о том, возможно ли это?И если да, то как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Предполагая, что у вас есть ссылка на ваш апплет (или любой другой Компонент), вы создаете внеэкранный экземпляр 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 , который создает изображение вне экрана для двойной буферизации.

0 голосов
/ 26 августа 2011

+ 1 в ответе выше, и вам все равно следует использовать двойную буферизацию в качестве общего шаблона проектирования в java-апплетах, чтобы предотвратить мерцание и другие проблемы с обновлением представления.

...