2011-06-14 66 views
0

我使用此代碼來填充桌面的顏色。如何用透明色填充桌面?

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

你在循環中執行它嗎?什麼阻止系統再次繪製它? – 2011-06-14 19:44:11

+1

透明色?所以人們可以看到他的顯示器的內部? :) – vines 2011-06-14 19:55:31

回答

2

GDI +(這是System.Drawing使用的)全部都是用軟件實現的,並且不知道它的速度。

你可能會更好地以不同的方式解決你的問題。嘗試使用BorderStyle = None製作窗體,調整大小以填充整個屏幕,並將其背景色設置爲紅色,並將其不透明度設置爲0.25(近似於您的alpha = 60)。

+0

我同意這一點。這比將它自己繪製成一個循環或試圖用刷子填充它要快得多 – 2011-06-14 20:05:35

+0

謝謝,它適用於我的應用程序。 – name1ess0ne 2011-06-16 06:52:38

1

使用GDI +做任何涉及完全透明度的事情總是會很慢。這是因爲透明度涉及大量的乘法和除法以混合像素顏色,而繪製不透明顏色僅僅是覆蓋舊像素的問題。它的處理器密集程度更高。

喬懷特的方法是一個很好的選擇。使用背色和低透明度的最大化形式可以很好地工作,而且要快得多。但請記住,在使用一種形式帶有一些其他的事情擔心:

  • 的形式將阻止點擊桌面圖標
  • 形式可以由用戶最小化,消除了紅色色調的 - 即使它不在任務欄中,windows鍵+ D也會將其最小化(儘管當然,它只是編寫代碼以使表單再次顯示)
  • 表單可能以其他表單的頂部結束,他們一個紅色的色調(你可以設置形式爲 但低於所有其他形式,這將解決這個問題)

它的速度並不慢,但在使用表單而不是直接繪製到桌面時還有其他一些問題需要擔心。

這真的取決於爲什麼要着色桌面紅 - 取決於你想達到什麼樣的,可能還有其他更簡單的方法:

  • 你可以染成桌面牆紙紅色 - 它不會影響圖標,但不會影響性能問題
  • 如果您不關心桌面交互,可以截取屏幕截圖,將其着色爲紅色,然後以最大化的形式顯示。如果你不認爲你需要重新繪製回到經常

而且,不要忘記,有些人擁有多個顯示器設置

  • 您當前的方法會就好了。如果要覆蓋全部,則需要爲每臺顯示器創建一個表單。

  • +0

    您不必爲每臺顯示器提供一種形式。如果您手動調整大小(而不是最大化),則可以給它一個覆蓋所有顯示器的寬度和高度。 – 2011-06-15 12:21:44

    +0

    @Joe White:感謝您指出這一點,忘記了您可以手動調整表單的大小,使其大於屏幕分辨率。 – 2011-06-16 01:12:50

    +0

    感謝您的回答。我想創建簡單的屏幕截圖,並決定在頂部使用透明窗口。 – name1ess0ne 2011-06-16 06:55:07