Визуализация прозрачного / прозрачного наложения

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

Я начну с последнего, а затем коснусь первого.

Решение 1

Используя форму без полей с TransparencyKey, это одно из наиболее рекомендуемых решений, которое я нашел, и наименее полезное.

Это решение работает с новой формой, без полей, с заданным фономColour.White и установитьTransparencyKey к тому же цвету, пусть он будет полноэкранным и верхним, и, возможно, установите некоторые другие параметры, чтобы он действовал невидимым для мыши и клавиатуры.

Проблема этого решения в том, что оно не поддерживает прозрачность; это только "выбивает" цветаточно так же какTransparencyKey и в качестве такового будет показано все, что имеет даже малейшее различие, отбрасывая идею о наличии полупрозрачных объектов на экране из окна.

Решение 2

Используйте P / Invoke и GDI +, чтобы получить (GetDC & Graphics.FromHdc), на самом деле нарисуйте, а затем отпустите (ReleaseDC) рабочий стол.

То, что он делает, работает довольно хорошо, но, к сожалению, есть некоторые проблемы.

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос