Визуализация прозрачного / прозрачного наложения
Мне нужен быстрый способ нарисовать наложение на экране с поддержкой прозрачности. Я провел много поисков и нашел одно потенциальное решение (у которого есть свои проблемы) и другое решение, которое не соответствует моим требованиям; особенно поддержка прозрачности.
Я начну с последнего, а затем коснусь первого.
Решение 1Используя форму без полей с TransparencyKey, это одно из наиболее рекомендуемых решений, которое я нашел, и наименее полезное.
Это решение работает с новой формой, без полей, с заданным фономColour.White
и установитьTransparencyKey
к тому же цвету, пусть он будет полноэкранным и верхним, и, возможно, установите некоторые другие параметры, чтобы он действовал невидимым для мыши и клавиатуры.
Проблема этого решения в том, что оно не поддерживает прозрачность; это только "выбивает" цветаточно так же какTransparencyKey
и в качестве такового будет показано все, что имеет даже малейшее различие, отбрасывая идею о наличии полупрозрачных объектов на экране из окна.
Используйте P / Invoke и GDI +, чтобы получить (GetDC
& Graphics.FromHdc
), на самом деле нарисуйте, а затем отпустите (ReleaseDC
) рабочий стол.
То, что он делает, работает довольно хорошо, но, к сожалению, есть некоторые проблемы.
Прежде всего; вызов его один раз приведет к тому, что он будет нарисован только один раз, и, таким образом, если экран вообще обновится после того, как он будет нарисован, он исчезнет, я не понимаю, как это исправить, и если это лучшее решение, мне определенно понадобится помощь с этим вопрос.
На втором месте; GDI + безумно медленный с этим методом, использующим полупрозрачную кисть иFillRectangle
и я честно не могу винить это, однако я требую, чтобы это было сделано довольно быстро; требование, которое GDI + явно не может выполнить.
В заключение; Мне нужен метод рисования наложения поверх экрана с поддержкой прозрачности, если второй метод - это метод, который я должен использовать, как я могу рисовать с помощью полупрозрачной кисти достаточно быстро, чтобы это не было проблемой, и как бы я обновил его так что он не исчезнет после обновления экрана, и если это не тот метод, который мне следует использовать, пожалуйста, укажите какой методдолжен использовать.