Как заполнить рабочий стол прозрачным цветом? - PullRequest
0 голосов
/ 14 июня 2011

Я использую этот код для заполнения рабочего стола цветом.

IntPtr desktop = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktop);
g.FillRectangle(new SolidBrush(Color.FromArgb(60, 255, 0, 0), Screen.PrimaryScreen.Bounds);      
ReleaseDC(IntPtr.Zero, desktop);

Это работает хорошо, но очень медленно.Если я заполняю рабочий стол непрозрачным цветом Color.FromArgb (255, 255, 0, 0), он работает очень быстро.Как я могу увеличить скорость прозрачного цветного рисования?

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

GDI + (который используется System.Drawing) реализован полностью в программном обеспечении и не известен своей скоростью.

Возможно, вам лучше решить свою проблему другим способом.Попробуйте создать форму с BorderStyle = None, измените ее размер на весь экран и установите красный цвет BackColor и непрозрачность 0,25 (близкая аппроксимация альфа = 60).

1 голос
/ 15 июня 2011

Использование GDI + для выполнения любых задач с полной прозрачностью всегда будет очень медленным. Это связано с тем, что прозрачность требует большого умножения и деления для смешивания цветов пикселей, а рисование непрозрачных цветов - это просто перезапись старых пикселей. Процессор намного интенсивнее.

Метод Джо Уайта - хорошая альтернатива. Максимизированная форма с задним цветом и низкой непрозрачностью будет работать просто отлично и будет намного быстрее. Имейте в виду, однако, что использование формы сопровождается несколькими вещами, о которых стоит беспокоиться:

  • Форма будет блокировать нажатия на значки на рабочем столе
  • Форма может быть свернута пользователем, убрав красный оттенок - даже если его нет на панели задач, Windows + + D сведет его к минимуму (хотя, конечно, это просто вопрос написания кода, чтобы снова отобразить форму )
  • Форма может закончиться поверх других форм, придав им красный оттенок (вы можете установить формы в быть ниже всех других форм, которые могли бы решить эту проблему)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...