我正在寻找一种在 Python 中截取 DirectX 游戏的方法。我已经尝试过使用 PIL 和其他东西,但我最终只得到了黑色的屏幕截图。我看到项目 directpython11 提供了与一些 DirectX 内容的 Python 绑定,但我没有找到与外部 DirectX 应用程序的屏幕截图相关的任何内容。
我有点迷路,任何帮助将不胜感激;)。
PS:我在 Windows 7 上使用 Python 2.7.3 32 位进行编码。
谢谢
我正在寻找一种在 Python 中截取 DirectX 游戏的方法。我已经尝试过使用 PIL 和其他东西,但我最终只得到了黑色的屏幕截图。我看到项目 directpython11 提供了与一些 DirectX 内容的 Python 绑定,但我没有找到与外部 DirectX 应用程序的屏幕截图相关的任何内容。
我有点迷路,任何帮助将不胜感激;)。
PS:我在 Windows 7 上使用 Python 2.7.3 32 位进行编码。
谢谢
这是一个相当复杂的话题。
实际上,以最简单的方式截取屏幕截图涉及抓取后缓冲区并将其写入文件。您的 Python DirectX 绑定应该支持从后缓冲区或前缓冲区制作纹理并用数据填充它;之后,图像写作由您决定。
不幸的是,进入后台缓冲区需要挂钩 DirectX 并在应用程序获取它之前拦截渲染上下文。虽然很简单,但这并没有很好的记录,并且需要相当多的(C++)代码来实现。您必须强制应用程序使用您控制的备用渲染上下文,然后自己截取屏幕截图。
据我所知,这种拦截的基础知识不能用纯 Python 完成。您可能能够找到使用显示编解码器的方法(在将屏幕传送到合成器后抓取屏幕),或者您可以使用现有的 DirectX 挂钩并实现最小的 IPC 来抓取数据并将其输入 Python 进行处理和写入到一个文件。
编辑:如果您对此感兴趣,我可以添加更多细节和一些可能有用的代码链接。我仍然不确定仅在 Python 中是否可行,但不要让这阻止你尝试。