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

2023-11-25

如何快速截取整个游戏屏幕?大约每秒 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 帧保存后缓冲区):

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐