4

如何快速截取整个游戏画面?每秒 20-30 次?(我想将它们转换为视频)

[[1]] 我尝试过 WMEncoder。结果是 WMEncoder 只能使用一组预配置的编解码器以视频格式 (wma) 捕获屏幕和屏幕区域。(29 fps 最佳编码结果)。WMEncoder 不能截图。

[[2]] 我试过 DirectX :

Surface s = device.CreateOffscreenPlainSurface(
Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
Format.A8R8G8B8, Pool.SystemMemory);
device.GetFrontBufferData(0, s);
SurfaceLoader.Save("c:\\Screenshot"+i.ToString()+".bmp", ImageFileFormat.Bmp, s);

这就像 gdi .. 非常慢.. 它只在 DirectX 1.0 中有效,因为 SurfaceLoader 在 DirectX 2.0 中不存在

我在一些帖子中读到的另一种方法是使用:

s = device.GetBackBuffer(0, 0, Microsoft.DirectX.Direct3D.BackBufferType.Mono);

,但这只会对当前窗口进行屏幕截图。

[[3]] 我尝试使用 Taksi(在 sourceforge.net)...但我不知道如何在 c# 中使用它并使其工作。

请帮帮我...

4

1 回答 1

1

您真的很想挂接到 directx,这样您就可以像您是那个游戏/应用程序一样进行调用。以下是一些这样做的网站(大多数都画了额外的东西,但我不明白为什么你不能每 x 帧保存一次后备缓冲区):

http://www.gamedev.net/topic/359794-c-direct3d-hooking-sample/

Disclamer:我没有试过这个,所以不确定你能得到什么 FPS,但我认为这是最快的方法,因为你可以在游戏中有效地做到这一点。

于 2011-08-25T07:15:13.403 回答