2011-01-27 85 views
2

有誰知道如何將效果應用於整個屏幕,使用C#或任何編程語言。 我最感興趣的是使屏幕變成單色(特別是綠白色而不是黑白色)。製作整個屏幕單色和其他全屏效果

我知道一個跨圖形卡解決方案是可能的,因爲我發現了一個程序,可以做到這一點: http://www.freedomscientific.com/products/lv/magic-bl-product-page.asp

任何人知道如何做到這事還是在哪裏看?

謝謝!

+1

是什麼讓你認爲你鏈接的軟件是*跨平臺*?我只能看到各種Windows版本的參考。 – thkala 2011-01-27 20:17:35

+1

我站好了。我的意思是它可以在不同版本的Windows上運行,跨平臺的配置很差。 – Dyte 2011-01-27 20:36:41

回答

2

沒有簡單的Windows API來修改整個屏幕內容。但是這可以在設備驅動程序級別完成。

否則,你不得不求助於一些Windows API技巧:在整個桌面上放置一個「假」窗口,在一個循環中:抓住整個屏幕內容而不抓住假窗口的內容,進行處理以獲得單色效果,然後在假窗口上顯示。是的,它很爛,很慢,但可能。更棘手的是,當你點擊鼠標來「穿過」假窗口(很多SetWindowsRgn調用)。

因此,這裏的跨平臺意味着使用GDI,儘管一些較老的DirectDraw API可能工作,在這種情況下,硬件覆蓋更容易(並且性能更好)。雖然我不確定有多少卡實際上支持硬件覆蓋,並且如果較新版本的Windows支持較早的DirectDraw API。

另外一種可能性是,如果顯卡具有C#或C++或C API,那麼您可以在不寫設備驅動程序代碼的情況下使用卡做任何事情。

然後是CUDA,但我還沒有嘗試過。我知道這是在nVidia主板上進行流處理,但我不知道它是否能夠讓你輕鬆進入視頻顯示的後門。

2

爲了幫助人們在未來誰對這個感興趣:

這是可能的Magnification API's color effect method。這允許使用可應用於整個屏幕的矩陣。

NegativeScreen是一個開源項目,實現您在C#中描述的功能。

不幸的是,這隻適用於仿射變換,因爲API只需要增強矩陣而不是委託或其他東西。