Как такое программное обеспечение, как GotoMeeting, захватывает изображение рабочего стола?

Мне было интересно, как программное обеспечение, такое как GotoMeeting, захватывает рабочий стол. Я могу сделать полноэкранный (или поблочный) захват с помощью GDI, но мне это кажется слишком расточительным. Также я изучил устройства Mirror, но мне было интересно, есть ли более простая техника или библиотека, которая делает это.

Мне нужен быстрый и эффективный снимок экрана рабочего стола (10p15 кадров в секунду), который я в конечном итоге собираюсь преобразовать в видеофайл и интегрировать с моим приложением для отправки захваченного канала по сети или что-то в этом роде.

Спасибо!


person verma    schedule 11.01.2010    source источник


Ответы (5)


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

По-прежнему означает, что вам нужно выполнить захват плюс дополнительную обработку для получения разницы, т. Е. Кодировать ее.

person petantik    schedule 14.01.2010

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

person Abdul jalil    schedule 02.09.2010

Я бы либо:

  • Делайте полноэкранные снимки, а затем выполняйте обработку изображений, чтобы изолировать части экрана, которые изменились, для экономии пропускной способности.

-OR-

  • Используйте такую ​​программу, как CamStudio.
person Andy West    schedule 11.01.2010
comment
Полноэкранная обработка изображений, хм.. Я всегда изолировал изображение на блоки и искал дельты, но, наверное, я не думал об этом как об обработке изображений. Это означает, что я могу использовать программируемые графические процессоры, чтобы немного разгрузить ЦП и выполнять быстрое обнаружение дельты. Потрясающий. - person verma; 12.01.2010

я получил от 20 до 30 кадров в секунду, используя драйвер памяти, который я отображаю в своем окне изображения, но когда я получаю полноэкранное обновление, эти кадры буферизуются. так как окно изображения работает медленно и имеет изменения в моем собственном компоненте, это несколько быстро, но не очень хорошо на полном экране, а в среднем я отображаю 10 кадров в секунду в полноэкранном режиме. Я столкнулся с проблемой рендеринга кадров. Я могу снимать от 20 до 30 кадров в секунду, но мой рендеринг составляет от 8 до 10 полноэкранных кадров за одну секунду. если у кого-то есть кадры рендеринга в полноэкранном режиме, пожалуйста, воспроизведите меня.

person Abdul jalil    schedule 11.10.2010

Какой язык?

.NET предоставляет Graphics.CopyFromScreen.

person Anon.    schedule 11.01.2010
comment
Ну, я хотел нейтральный к языку ответ, больше похожий на обсуждение методов, чем на вызовы API. CopyFromScreen будет выполнять побитовую передачу, что, как я уже упоминал, для меня довольно расточительно. Выполнение этой операции 10-15 раз в секунду на не очень мощном ноутбуке либо сделает ее заметной, либо разрядит батарею ноутбука, либо и то, и другое. Так что нужно что-то более эффективное. - person verma; 12.01.2010
comment
Если бы существовал более эффективный метод, вы не думаете, что основная библиотека .NET использовала бы его? Если вам нужен более эффективный способ, он не будет захватывать сам экран. - person Anon.; 12.01.2010
comment
Ну, я не говорю, что вызов .NET CopyFromScreen неэффективен, я просто говорю, что для моего конкретного случая я считаю его расточительным. Я не хочу снимать весь экран только для того, чтобы понять, что экран вообще не изменился. - person verma; 12.01.2010
comment
Одна оптимизация, которую вы могли бы сделать, это посмотреть, были ли какие-либо движения мыши или события клавиатуры с момента последнего снимка экрана. Если не было, то больше не захватывайте. За исключением того, что это не поможет ни с какими окнами, которые обновляются независимо от ввода, то есть с анимацией, видео и т. Д. - person Matt Warren; 18.01.2010