有谁知道如何在 c# 或任何编程语言中将效果应用于整个屏幕。我最感兴趣的是使屏幕单色(特别是绿白而不是黑白色)。
我知道跨显卡解决方案是可能的,因为我找到了一个可以做到这一点的程序: http ://www.freedomscientific.com/products/lv/magic-bl-product-page.asp
任何人都知道如何完成这个或在哪里看?
谢谢 !!
有谁知道如何在 c# 或任何编程语言中将效果应用于整个屏幕。我最感兴趣的是使屏幕单色(特别是绿白而不是黑白色)。
我知道跨显卡解决方案是可能的,因为我找到了一个可以做到这一点的程序: http ://www.freedomscientific.com/products/lv/magic-bl-product-page.asp
任何人都知道如何完成这个或在哪里看?
谢谢 !!
没有简单的 Windows API 可以修改整个屏幕内容。但这可以在设备驱动程序级别完成。
否则,您必须求助于一些 Windows API 技巧:在整个桌面上放置一个“假”窗口,循环:抓取整个屏幕内容而不抓取假窗口内容,进行处理以获得单色效果,然后将其显示在假窗口。是的,它既笨拙又慢,但有可能。更骇人听闻的是,当您单击鼠标以“通过”假窗口(大量SetWindowsRgn
调用)时。
因此,这里的跨平台意味着使用 GDI,尽管一些较旧的 DirectDraw API 可能会起作用,在这种情况下,您可以更轻松地使用硬件覆盖(以及更好的性能)。虽然我不确定有多少卡实际支持硬件覆盖,以及较新版本的 Windows 是否支持较旧的 DirectDraw API。
另一种可能性是,如果视频卡具有 C# 或 C++ 或 C API,那么您可以对卡做任何您想做的事情,而无需编写设备驱动程序代码。
然后是 CUDA,但我还没有尝试过。我知道它用于 nVidia 板上的流处理,但我想知道它是否可以让您轻松进入视频显示内容的后门。
为了帮助将来对此感兴趣的人:
这可以通过Magnification API 的颜色效果方法实现。这允许人们使用可以应用于整个屏幕的矩阵。
NegativeScreen是一个开源项目,它实现了您在 C# 中描述的功能。
不幸的是,这仅适用于仿射变换,因为 API 仅采用增强矩阵而不是委托或其他东西。