Я новичок в SlimDX и слышал, что есть способ делать снимки экрана с помощью этой библиотеки. Причина, по которой я хочу использовать SlimDX, заключается в том, что я хочу делать скриншоты намного быстрее, чем
Graphics.CopyFromScreen()
так что я могу сделать приложение для прямой трансляции, работающее с более высокой частотой кадров.
У меня есть код, который я нашел в Интернете, который должен захватывать рабочий стол, но он всегда дает сбой в строке, где я создаю экземпляр устройства.
Я попытался изменить параметр 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.
Есть идеи?