2

我想用自制的应用程序实时生成一部电影,该应用程序通过正在运行的 3D 应用程序占用部分屏幕进行快速屏幕捕获。

我知道已经存在几个应用程序(如 FRAPS 或 Taksi),甚至专用的 DirectShow 过滤器(如 UScreenCapture),但我真的需要用我自己的外部应用程序来实现。

正确设置 (UScreenCapture + ffdshow) 时,捕获压缩全屏不会像您预期的那样消耗 CPU(大约 15%),并且不会影响 3D 应用程序的性能。

从外部应用程序进行捕获的问题是 3D 应用程序失去了 Vsync 并创建了一个毛茸茸的、难以使用的 3D 应用程序(3D 应用程序只呈现在屏幕的一小部分,其余的是 GDI、DirectX)

FRAPS 通过允许您一次仅捕获一个应用程序(具有焦点的应用程序)来解决此问题。根据所使用的技术(OpenGl、DirectX、GDI),它会挂接 Vsync 并进行捕获(使用 glReadPixels,...),而不会干扰它。这样做并不能解决我的问题,因为我想要完整的合成屏幕图像(包括 3D 和其余部分)和流畅的 3D 应用程序。

UScreenCapture 似乎使用快速 DirectX 调用来捕获整个屏幕,但 openGL 3D 应用程序仍然不同步。

执行 BitBlt 太慢并且 CPU 消耗以进行实时 30 fps 采集(至少在 windows XP 下,不确定 7)

我的问题是知道是否有办法使用 Windows 7 实现我的目标,它是全新的 DirectX 合成引擎?

Windows 7 成功地显示每个应用程序的实时 VSynced 重复预览(在任务栏中),因此必须有一种方法可以访问当前显示的屏幕缓冲区,而不会干扰 3D OpenGL 应用程序的渲染?

任何其他建议,技术?谢谢你

4

1 回答 1

1

我列出了可能有用的链接列表

http://betterlogic.com/roger/?p=3037

如果你有任何成功,请告诉我——最终我也会对 Windows 的快速开源屏幕截图感兴趣......

相关:最快的截屏方法

于 2010-08-11T21:42:43.687 回答