Java Robot createScreenCapture производительность - PullRequest
12 голосов
/ 14 марта 2009

Мне нужно взять серию скриншотов и объединить их в фильм. Я пытаюсь использовать класс Java-робота для захвата экрана.

Но метод createScreenCapture () занимает больше 1 секунды на моем компьютере. Я не могу даже получить 1 кадр в секунду. Есть ли способ ускорить это? Или есть другой API?

Редактировать: выделяет буферизованное изображение.

BufferedImage image = robot.createScreenCapture (screen); // Сохранить скриншот как jpg
Файл file = новый файл ("images / screen" + index + ".jpg");
ImageIO.write (изображение, "jpg", файл); Индекс ++;

Запись его в jpg-файл занимает около 200 мс, а получение BufferedImage - около 1400 мс.

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Попробуйте поэкспериментировать с различными настройками экрана. Глубина цвета влияет на это, так как AWT должен преобразовать все в общий растровый формат.

Некоторые примеры времени с моего ПК:

 Resolution | Depth | Time taken 
------------+-------+------------
 1280x1024  | 32    | 215ms
 1280x1024  | 16    | 155ms
 1600x900   | 32    | 235ms

Мой адаптер не может работать с 24bpp или 64bpp, поэтому я не смог протестировать эти глубины, но я бы предположил, что для преобразования потребуется больше циклов ЦП.

2 голосов
/ 14 марта 2009

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

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

Но если вам нужно придерживаться Java и Robot, вы уверены, что это всего лишь один вызов функции, который занимает так много времени? Это не распределение BufferedImage или что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...