澄清:你想在桌面的面積,不只是你的窗口的範圍內,是你的控制,讓您應用逐像素過濾器下。如果是這樣的話,我認爲你需要的是使用XNA庫的DirectDraw。 WPF可以讓你得到你所需要的,但WinForms很可能不會。還有第三方工具。
如果希望只在您的應用程序窗口的界限這種能力,例如在繪圖應用程序,它變得更容易。從Control繼承的Windows.Forms名稱空間中的每個類都暴露了一個CreateGraphics()方法。此方法返回一個表示覆蓋控件屏幕區域的繪圖表面的對象,並且是幾乎任何您想在涉及自定義圖形的窗口上執行的任何操作的基礎(在內部,它用於首先繪製控件) 。
一旦你有圖形對象,你可以在上面畫圖。繪製動畫或遊戲等自定義圖形的常用方法是在Bitmap對象上進行實際繪製(從抽象圖像派生),然後完成後在圖形區域繪製位圖。這樣做是爲了減少閃爍;如果圖形區域在繪製時顯示給用戶,那麼用戶在「擦除」和重繪之前只能看到完整的圖像一秒鐘,並且半途畫出的形狀將在那裏一會兒並且消失接下來等待被繪製。繪製到位圖,然後在完成後在屏幕上顯示位圖,意味着用戶一次可看到完整的圖像。
您可以使用透明度功能擴展此功能以創建多層圖像。爲您希望操作的每個圖層都有一個位圖。分別對它們進行處理,然後按照它們從後到前的正確順序將它們中的每一個繪製到主位圖上,然後在屏幕上繪製該位圖。這允許您使用PhotoShop類型的操作,其中一部分圖像是一個圖層,並且可以獨立於其他圖層進行操作。
對於每像素過濾,Bitmap對象公開了GetPixel()和SetPixel()方法,這些方法允許您獲取單個像素的顏色,執行濾鏡計算並重新繪製它。這個過程將完全不加速,因此受到CPU速度的限制,但可以非常精細地控制圖像或重複執行任務,如過濾器。
看起來很像xor過濾器。 – 2010-09-17 17:16:49