Дублирование рабочего стола DXGI, захват только определенного прямоугольника

#c #winapi #windows-10 #directx #dxgi

#c #winapi #windows-10 #directx #dxgi

Вопрос:

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

пожалуйста, взгляните на эту картинку:

введите описание изображения здесь

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

Я уже ссылался на образец дублирования рабочего стола DXGI, и он выглядит очень сложным.

Примечание: я буду использовать WDA_EXCLUDEFROMCAPTURE, чтобы удалить окно из прямоугольника захвата, чтобы я мог получить визуальное изображение за окном

Комментарии:

1. Вы можете установить положение окна в Блокноте и передать координаты перемещения окна в блокнот. Или нарисуйте прозрачное многоуровневое окно самостоятельно, визуализируйте его, а затем вычислите координаты.

2. я не уверен, как это сделать.

3. SetWindowPos или MoveWindow

4. нет, не этот метод

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

Ответ №1:

API разработан таким образом, что вы захватываете составное изображение для всего монитора с очень небольшими затратами на обработку. Нет возможности захватить область интереса (ROI), и в этом тоже нет особого смысла: вы почти ничего не выиграете, в частности, не будет никакого выигрыша в производительности.

Когда вы захватываете кадр, у вас есть стандартная текстура, и вы можете делать с данными все, что захотите. В частности, вы можете извлечь свой ROI. Вы также можете сверить обновленные / перемещенные прямоугольники с вашими координатами ROI. Вы также можете сопоставить данные текстуры и обработать их как массив байтов. То есть его довольно легко обрезать, и есть несколько способов сделать это — это просто не та задача, для которой предназначен API дублирования рабочего стола.

Комментарии:

1. Скрытый в этом ответе подразумевается, что API дублирования рабочего стола может дублировать отдельные мониторы на рабочем столе Windows, а не весь рабочий стол Windows. Так ли это?