C# 使整个屏幕呈现单色和其他全屏效果

C# 使整个屏幕呈现单色和其他全屏效果,c#,fullscreen,effects,monochrome,C#,Fullscreen,Effects,Monochrome,有人知道如何用c#或任何编程语言将效果应用于整个屏幕吗。 我最感兴趣的是使屏幕变成单色(特别是绿白色而不是黑白) 我知道交叉图形卡解决方案是可行的,因为我发现了一个可以做到这一点的程序: 有人知道如何做到这一点,或者去哪里寻找 谢谢 没有简单的Windows API来修改整个屏幕内容。但这可以在设备驱动程序级别完成 否则,您必须求助于一些Windows API技巧:在整个桌面上放置一个“假”窗口,在一个循环中:在不抓取假窗口内容的情况下抓取整个屏幕内容,进行处理以获得单色效果,然后在假窗口上显

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

我知道交叉图形卡解决方案是可行的,因为我发现了一个可以做到这一点的程序:

有人知道如何做到这一点,或者去哪里寻找


谢谢

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

否则,您必须求助于一些Windows API技巧:在整个桌面上放置一个“假”窗口,在一个循环中:在不抓取假窗口内容的情况下抓取整个屏幕内容,进行处理以获得单色效果,然后在假窗口上显示。是的,它很粗糙,速度很慢,但也有可能。更骇人的是,当你点击鼠标“穿过”假窗口时(大量
SetWindowsRgn
调用)

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

另一种可能是,如果视频卡有C或C++或C API,那么你可以在不写设备驱动程序代码的情况下,用卡做任何你想做的事情。
还有CUDA,但我还没试过。我知道它是用于nVidia板上的流处理,但我想知道它是否可以让您轻松地进入视频显示领域。

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

这是可能的。这允许使用可应用于整个屏幕的矩阵

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


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

是什么让您认为链接到的软件是跨平台的?我所能看到的只是对各种Windows版本的引用。我的观点是正确的。我的意思是,它可以在不同版本的windows上工作,跨平台的设计非常糟糕。您可能需要创建一个驱动程序或应用
广泛的系统挂钩
。。。特别是托管代码,它不会很简单。广泛的系统挂钩,非常有趣的主题。我将对此进行调查。你所说的设备驱动程序级别。你能告诉我在哪里可以找到更多关于与之互动的信息吗?是的,我也在考虑“假窗口”的解决方案,但由于没有直接的方法在活动窗口的“下方”拍摄屏幕快照,我必须使用一个循环,在其中隐藏活动窗口,拍摄照片,然后再次显示,这将导致可怕的闪烁。感谢其他建议和头脑风暴!我从来没有写过设备驱动程序,所以我不能给你任何真正的建议。对于闪烁的“假”窗口,有一个GDI技巧,假窗口有99%的不透明度,然后使用不带CAPTUREBLT标志的BitBlt(基本屏幕捕获)。这会导致屏幕捕获错过任何具有透明度的窗口。对丢失假窗口有好处,对丢失真实窗口内容有坏处。我听说了这个解决方法。但这是否也适用于Windows7?因为归根结底,设计上并不是这样的吗?是的,每个小技巧实际上都是官方windows API的一部分,但将它们串在一起以实现这个特定功能感觉很粗糙,因为这个功能真正需要的是一个好的、友好的、可靠的、高性能的API来根据需要修改屏幕内容,无需编写驱动程序。使用这些小技巧在Vista/Win7中工作?可能吧,但我敢打赌,由于DWM,他们会有一些古怪的行为,或者可能会有额外的性能问题。要尝试的一件事是微软IntelliPoint软件中的“放大镜”功能,它是免费的,但需要MS品牌的鼠标。在Vista/Win7上,此放大镜肯定存在一些绘图问题,但仅在某些系统上存在。