2

有谁知道如何在 c# 或任何编程语言中将效果应用于整个屏幕。我最感兴趣的是使屏幕单色(特别是绿白而不是黑白色)。

我知道跨显卡解决方案是可能的,因为我找到了一个可以做到这一点的程序: http ://www.freedomscientific.com/products/lv/magic-bl-product-page.asp

任何人都知道如何完成这个或在哪里看?

谢谢 !!

4

2 回答 2

2

没有简单的 Windows API 可以修改整个屏幕内容。但这可以在设备驱动程序级别完成。

否则,您必须求助于一些 Windows API 技巧:在整个桌面上放置一个“假”窗口,循环:抓取整个屏幕内容而不抓取假窗口内容,进行处理以获得单色效果,然后将其显示在假窗口。是的,它既笨拙又慢,但有可能。更骇人听闻的是,当您单击鼠标以“通过”假窗口(大量SetWindowsRgn调用)时。

因此,这里的跨平台意味着使用 GDI,尽管一些较旧的 DirectDraw API 可能会起作用,在这种情况下,您可以更轻松地使用硬件覆盖(以及更好的性能)。虽然我不确定有多少卡实际支持硬件覆盖,以及较新版本的 Windows 是否支持较旧的 DirectDraw API。

另一种可能性是,如果视频卡具有 C# 或 C++ 或 C API,那么您可以对卡做任何您想做的事情,而无需编写设备驱动程序代码。

然后是 CUDA,但我还没有尝试过。我知道它用于 nVidia 板上的流处理,但我想知道它是否可以让您轻松进入视频显示内容的后门。

于 2011-01-27T23:39:54.037 回答
2

为了帮助将来对此感兴趣的人:

这可以通过Magnification API 的颜色效果方法实现。这允许人们使用可以应用于整个屏幕的矩阵。

NegativeScreen是一个开源项目,它实现了您在 C# 中描述的功能。

不幸的是,这仅适用于仿射变换,因为 API 仅采用增强矩阵而不是委托或其他东西。

于 2016-02-18T01:31:18.327 回答