C# 捕获直接 3D 屏幕

Posted

技术标签:

【中文标题】C# 捕获直接 3D 屏幕【英文标题】:C# Capturing Direct 3D Screen 【发布时间】:2011-09-02 18:47:05 【问题描述】:

我一直在玩屏幕捕捉一段时间,我设法捕捉到整个屏幕,屏幕上的某些区域等......

但是当我进入游戏并尝试捕获屏幕时,它会完全忽略游戏,而是捕获桌面(或游戏窗口后面的任何东西)。 另一个有趣的事实是,同样的事情发生在 PrtScn 按钮上。

关于如何捕捉游戏屏幕的任何想法?

【问题讨论】:

【参考方案1】:

您使用的屏幕捕获技术非常适合捕获非硬件加速的内容。我怀疑您在尝试在 Windows Media Player 中捕获电影帧时会遇到同样的问题。

解决方案是使用 DirectX 从硬件本身进行屏幕截图。 This article 解释了如何使用一些代码和一个名为 SlimDX 的 DirectX 托管包装器来做到这一点。

编辑 如果 Slim DX 不适合您,那么您只需要在 Direct X 周围找到另一个托管包装器。我认为如果不在硬件级别和 DirectX 上工作,您将无法进行屏幕捕获是在 Windows 平台上执行此操作的方法。

【讨论】:

它需要 SlimDX,这不是很好,因为你必须在任何地方安装它。 @Or Betsalel 您不必使用安装程序。您还可以将 SlimDX 二进制文件与您的应用程序一起分发。 SlimDX 有安装程序的唯一原因是同时安装 Microsoft 的 DirectX 运行时。 您的意思是只分发 Bin 文件夹?不需要安装? 好的,但是这个例子似乎不起作用,你有任何其他例子或带有源代码的示例(可执行文件)吗? *它适用于桌面和其他窗口,但不适用于游戏。 或 Betzalel - 不,我不是这方面的专家,但花一点时间在谷歌上搜索得到了很多结果。

以上是关于C# 捕获直接 3D 屏幕的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# .Net 将屏幕捕获为视频?

是否可以限制用户在 C# 中拍摄屏幕快照

DirectX屏幕捕获和输出视频

Unity3d在屏幕范围内随机生成一个圆

U3D屏幕坐标,世界坐标,像素坐标之间的关系

C# 使用 SlimDX 获取窗口/桌面截图