C#使用SlimDX

时间:2017-12-31 21:07:24

标签: c# screenshot slimdx

我是SlimDX的新手,我听说有一种方法可以使用这个库捕获截图。我想使用SlimDX的原因是我想要比

更快地捕获截图
Graphics.CopyFromScreen()

这样我就可以让livestream应用程序以更高的帧速率运行。

我在互联网上找到了一些应该捕获桌面的代码,但它总是在我创建Device实例的行中崩溃。

我尝试将DeviceType参数更改为Software,将CreateFlags更改为Multithreaded只是为了查看是否有任何更改,但没有任何操作,这就是它每次都说的内容:

  

SlimDX.Direct3D9.Direct3D9Exception:'D3DERR_INVALIDCALL:无效通话(-2005530516)'

这是我的代码:

var pp = new PresentParameters();
pp.Windowed = true;
pp.SwapEffect = SwapEffect.Discard;

var d = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.SoftwareVertexProcessing, pp);
var surface = Surface.CreateOffscreenPlain(d, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.Scratch);

d.GetFrontBufferData(0, surface);

//not sure if this will work
var ds = Surface.ToStream(surface, ImageFileFormat.Jpg);
var img = Image.FromStream(ds);

我还读过,这可能是BackBuffer不受显卡支持的结果,但在这种情况下我真的不知道如何解决这个问题。

我的显卡 AMD R270X

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

pp.BackBufferCount设置为0有效。拍摄时间仍然很长......