用c#捕捉游戏画面的最快方法(每秒超过20张图像)

如何快速制作整个游戏画面的大屏幕? 像每秒20-30的东西?(我想将它们转换为video)

[[1]]我尝试过WMEncoder。结果是WMEncoder只能使用一组预先配置的编解码器以video格式(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 ..very slow ….它只适用于DirectX 1.0,因为在DirectX 2.0中不存在SurfaceLoader

我在一些post中读到的另一种方式是使用:

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

,但这只是截图到了当前的窗口。

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

请帮帮我…

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

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

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