微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用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 ..very slow ….它只适用于DirectX 1.0,因为在DirectX 2.0中不存在SurfaceLoader

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

s = device.GetBackBuffer(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,但我认为这是最快的方法,因为你在游戏中有效地做到了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐