2017-12-31 249 views
1

私はSlimDXが新しく、このライブラリを使用してスクリーンショットをキャプチャする方法があると聞いてきました。私はSlimDXを使用したい理由は、私は私がより高いフレームレートで実行されているライブストリーミングアプリを作ることができるようにC#SlimDXを使用してウィンドウ/デスクトップのスクリーンショットを取る

Graphics.CopyFromScreen() 

よりもはるかに高速のスクリーンショットをキャプチャしたいということです。

私はインターネット上でデスクトップをキャプチャする必要があるコードをいくつか持っていますが、デバイスのインスタンスを作成する行では常にクラッシュします。

私はちょうど何が変わるかどうかを確認するために、ソフトウェアへのDeviceTypeをパラメータとマルチスレッドにCreateFlagsを変更しようとしたが、何もなかったし、これは毎回こう言われる、

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です。

答えて

0

設定pp.BackBufferCount0が機能しました。キャプチャ時間はまだかなり長いですが..

関連する問題