2017-12-31 161 views
1

Ich bin neu in SlimDX und ich habe gehört, dass es eine Möglichkeit gibt, Screenshots mit dieser Bibliothek zu erfassen. Der Grund, warum ich will SlimDX verwenden ist, dass ich Screenshots viel schneller erfassen möchten alsC# Take Fenster/Desktop-Screenshot mit SlimDX

Graphics.CopyFromScreen() 

so, dass ich eine Live-Stream App bei höheren Frameraten laufen zu machen.

Ich habe einen Code, den ich im Internet gefunden habe, der den Desktop erfassen sollte, aber es stürzt immer an der Linie ab, wo ich eine Instanz von Device erstelle.

Ich versuchte, den Device Parameter zu Software ändern und die Create zu Multithreaded nur, wenn sich etwas ändert, um zu sehen, aber nichts tat, und das ist, was es jedes Mal sagt:

SlimDX.Direct3D9.Direct3D9Exception: 'D3DERR_INVALIDCALL: Unzulässiger Aufruf (-2005530516)'

Hier ist der Code, den ich habe:

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); 

Ich habe auch gelesen, dass es sein könnte, dass BackBuffer nicht von der Grafikkarte unterstützt wird, aber in diesem Fall weiß ich wirklich nicht, wie ich das beheben kann.

Meine Grafikkarte ist AMD R270X.

Irgendwelche Ideen?

Antwort

0

Einstellung pp.BackBufferCount bis 0 gearbeitet. Die Aufnahmezeit ist immer noch ziemlich lang.