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