加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:22:51 所属栏目:百科 来源:网络整理
导读:如何快速地对整个游戏画面进行屏幕截图?像每秒20-30的东西?(我想将它们转换为视频) [[1]] 我已经尝试过WMEncoder.结果是WMEncoder只能使用一组预先配置的编解码器以视频格式(wma)捕获屏幕和屏幕区域. (29 fps最佳编码结果).WMEncoder无法制作截图. [[2]]
如何快速地对整个游戏画面进行屏幕截图?像每秒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,但我认为这是最快的方法,因为你在游戏中有效地做到了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读