C#捕获Direct 3D屏幕

9
我已经在屏幕截图方面摸索了一段时间,我成功地捕捉到了整个屏幕、屏幕上的特定区域等等...
但是当我进入游戏并尝试截取屏幕时,它完全忽略了游戏窗口,而是捕捉了桌面(或者游戏窗口后面的任何东西)。另一个有趣的事实是,按下PrtScn按钮也会出现相同的情况。
有什么办法可以捕捉游戏屏幕吗?
1个回答

8
您正在使用的屏幕捕捉技术适用于捕捉非硬件加速的内容。我猜想在尝试捕捉Windows Media Player中的电影帧时,您也会遇到同样的问题。
解决方案是使用DirectX从硬件本身进行屏幕捕捉。这篇文章解释了如何使用一些代码和一个名为SlimDX的DirectX托管包装器来实现。 编辑:如果Slim DX对您无效,则需要找到另一个DirectX托管包装器。我认为您将无法在不涉及硬件级别的情况下进行屏幕捕捉,而DirectX是在Windows平台上实现这一目标的手段。

它需要SlimDX,这并不是很好,因为你必须在任何地方都要安装它。 - Or Betzalel
2
@Or Betsalel,您不必使用安装程序。您也可以将SlimDX二进制文件与您的应用程序一起分发。SlimDX具有安装程序的唯一原因是安装Microsoft的DirectX运行时。 - vcsjones
你的意思是只需要分发 Bin 文件夹吗?不需要安装吗? - Or Betzalel
好的,但是这个例子似乎不起作用,你有其他的例子或者一个带源代码的样本(可执行文件)吗?*它在桌面和其他窗口上可以工作,但在游戏中不行。 - Or Betzalel
Or Betzalel - 不,我不是这个主题的专家,但花点时间在谷歌上搜索可以找到很多结果。 - vcsjones
这里还有一个更为实用的示例,使用了SharpDX:http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/ - Justin Stenning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接