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