4

ゲーム画面全体のスクリーンショットを非常に高速にするにはどうすればよいですか? 毎秒20~30くらい?(動画に変換したい)

[[1]] WMEncoder を試してみました。その結果、WMEncoder は、事前に構成された一連のコーデックを使用して、ビデオ形式 (wma) でのみ画面と画面の領域をキャプチャできることがわかりました。(29 fps の最良のエンコード結果)。WMEncoder はスクリーンショットを作成できません。

[[2]] DirectX を試してみました:

Surface s = device.CreateOffscreenPlainSurface(
Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
Format.A8R8G8B8, Pool.SystemMemory);
device.GetFrontBufferData(0, s);
SurfaceLoader.Save("c:\\Screenshot"+i.ToString()+".bmp", ImageFileFormat.Bmp, s);

これは gdi のように動作します..非常に遅いです....また、SurfaceLoader が directX 2.0 に存在しないため、DirectX 1.0 でのみ動作します。

私がいくつかの投稿で読んだ別の方法は、次を使用することです:

s = device.GetBackBuffer(0, 0, Microsoft.DirectX.Direct3D.BackBufferType.Mono);

、しかし、これはスクリーンショットを現在のウィンドウにのみ作成します。

[[3]] (sourceforge.net で) Taksi を使用しようとしましたが、C# で使用して動作させる方法がわかりません。

私を助けてください...

4

1 に答える 1

1

ゲーム/アプリケーションであるかのように呼び出しを行うことができるように、directx にフックする必要があります。以下は、これを行ういくつかのサイトです (ほとんどは余分なものを描画しますが、x フレームごとにバックバッファーを保存できなかった理由がわかりません)。

http://www.gamedev.net/topic/359794-c-direct3d-hooking-sample/

免責事項: 私はこれを試していないので、どの FPS を取得できるかはわかりませんが、ゲーム内から効果的に実行しているため、これが最速の方法だと思います。

于 2011-08-25T07:15:13.403 に答える