【发布时间】:2011-11-03 09:44:01
【问题描述】:
如何快速截取整个游戏屏幕?每秒 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# 中使用它并使其工作。
请帮帮我...
【问题讨论】:
-
您提到了 GDI,您使用的是
Bitblt还是System.Drawing命名空间?这在性能上有很大的不同。 -
所以你不想拍视频,只是因为性能问题(不知道会不会影响性能)?在完成其余工作后转换它们?我想知道你为什么只拍视频,它会更简单。编辑:我看到你的另一个问题是拍摄视频。这很奇怪,我认为人们对截屏比拍摄视频更感兴趣。
-
嗯,当我使用这个捕获游戏屏幕但不知道它是快还是慢:codeproject.com/KB/cs/DesktopCaptureWithMouse.aspx
标签: c# screenshot direct3d screen-capture image-capture