5everin Ответов: 1

Взаимодействие GDI+ и рабочего стола


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

Я написал заставку с использованием Winforms и GDI+ , которая рисует фигуры в буфер с ручным управлением, а затем рендерит готовое изображение в форму. Все работает так, как задумано. (вещи летают по экрану)

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

Это также прекрасно работает, но вводит "прерывистость" в анимацию. После выполнения некоторых тестов с функцией секундомера: это не сводится к чрезмерной нагрузке, размещенной на системе. Для рендеринга моей "шпионской дыры" требуется около 5000 тиков. Я также пробовал различные варианты композитинга и сглаживания практически без эффекта.

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

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

Что я уже пробовал:

Включено в описание проблемы.

1 Ответов

Рейтинг:
9

Dave Kreskowiak

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


5everin

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

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

Dave Kreskowiak

Нет.