在c#中捕获游戏屏幕截图的最快方法?(每秒超过20张图像)



我怎么能让截图到整个游戏屏幕非常快?比如每秒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中工作,因为DirectX 2.0中不存在SurfaceLoader

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

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

,但这使得屏幕截图只到当前窗口。

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

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

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

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

最新更新