Получить скриншот Windows desktop
От: Vicul  
Дата: 28.09.19 06:09
Оценка:
Для захвата десктопа использую обычный способ через BitBlt() и GetDIBits().
Мне необходимо вставлять этот скриншот в видео поток c fps до 30. На маленьких частотах это работает.
Но на больших частотах начинаю терять кадры на выходе, н-р, на заявленной частоте 30 получаю, где то 18.

Подкиньте идею, как получить скрин побыстрее.
Re: Получить скриншот Windows desktop
От: okman Беларусь https://searchinform.ru/
Дата: 28.09.19 11:50
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

V>Для захвата десктопа использую обычный способ через BitBlt() и GetDIBits().

V>Мне необходимо вставлять этот скриншот в видео поток c fps до 30. На маленьких частотах это работает.
V>Но на больших частотах начинаю терять кадры на выходе, н-р, на заявленной частоте 30 получаю, где то 18.

V>Подкиньте идею, как получить скрин побыстрее.


Если для Windows 8 и выше, то:

Desktop Duplication API
https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/desktop-dup-api

Для предыдущих версий Windows могу разве что Mirror Driver посоветовать
(хотя написать его не так-то просто, да еще будут проблемы с Windows Aero)...

Mirror Drivers
https://docs.microsoft.com/en-us/windows-hardware/drivers/display/mirror-drivers
Re[2]: Получить скриншот Windows desktop
От: Vicul  
Дата: 28.09.19 12:03
Оценка:
Спасибо,

O>Если для Windows 8 и выше, то:


Мне бы еще 7 Винду захватить...

А на ДиректХ кто-нибудь пробовал такое замутить

https://stackoverflow.com/questions/30021274/capture-screen-using-directx

Как оно по скорострельности?
Re[3]: Получить скриншот Windows desktop
От: alexander_r  
Дата: 28.09.19 13:17
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

V>Спасибо,


O>>Если для Windows 8 и выше, то:


V>Мне бы еще 7 Винду захватить...


V>А на ДиректХ кто-нибудь пробовал такое замутить


Есть проект Open Broadcast Studio там можно много полезного подсмотреть, по поводу захвата экрана и его энкодинга
на Win7 можно создать gdi совместимую текстуру, получить ее DC и с помощью bitblt скопировать на нее экран, получается достаточно быстро (2k экран, 30 fps — 5-7% CPU)
Re[3]: Получить скриншот Windows desktop
От: alexander_r  
Дата: 28.09.19 13:30
Оценка: 2 (1)
Здравствуйте, Vicul, Вы писали:

V>https://stackoverflow.com/questions/30021274/capture-screen-using-directx


V>Как оно по скорострельности?


GetFrontBufferData(...)

The buffer pointed to by pDestSurface will be filled with a representation of the front buffer, converted to the standard 32 bits per pixel format D3DFMT_A8R8G8B8.
This method is the only way to capture an antialiased screen shot.
This function is very slow, by design, and should not be used in any performance-critical path.
For more information, see Lost Devices and Retrieved Data.


еще при отключенной композитной отрисовке не захватываются окна с прозрачностью, но в принципе у меня на gtx 960 работало нормально
самый лучший вариант это duplicationApi, но он только Win8+
Re[4]: Получить скриншот Windows desktop
От: Vicul  
Дата: 28.09.19 13:52
Оценка:
V>>Как оно по скорострельности?
_>еще при отключенной композитной отрисовке не захватываются окна с прозрачностью, но в принципе у меня на gtx 960 работало нормально
_>самый лучший вариант это duplicationApi, но он только Win8+


Спасибо за инфу, буду разбираться
Re[5]: Получить скриншот Windows desktop
От: merget  
Дата: 09.06.20 09:22
Оценка:
Здравствуйте, Vicul, Вы писали:


V>>>Как оно по скорострельности?

_>>еще при отключенной композитной отрисовке не захватываются окна с прозрачностью, но в принципе у меня на gtx 960 работало нормально
_>>самый лучший вариант это duplicationApi, но он только Win8+


V>Спасибо за инфу, буду разбираться


Как в итоге решили вопрос для Win7?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.