我使用此代码用颜色填充桌面。
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)填充桌面,它的工作速度非常快。 如何提高透明彩色绘图的速度?
答案 0 :(得分:2)
GDI +(System.Drawing使用的)全部用软件实现,并且因速度而闻名。
你可能会以不同的方式解决问题。尝试使用BorderStyle = None创建一个Form,调整它以填充整个屏幕,并将其BackColor设置为红色,将其Opacity设置为0.25(近似于alpha = 60)。
答案 1 :(得分:1)
使用GDI +做任何涉及完全透明的事情总是很慢。这是因为透明度涉及大量的乘法和除法以混合像素颜色,而绘制不透明的颜色只是覆盖旧像素的问题。它的处理器密集程度更高。
Joe White的方法是个不错的选择。具有背景色和低不透明度的最大化形式可以很好地工作,并且速度更快。但请记住,使用表单还需要担心一些其他问题:
它不是那么慢,但是在使用表单而不是直接绘制到桌面时还有其他一些事情需要担心。
这实际上取决于为什么你想要将桌面着色为红色 - 根据你想要实现的目标,可能还有其他更简单的方法:
另外,不要忘记有些人有多个显示器设置。如果要覆盖所有显示,则需要为每个显示器创建一个表单。