スクリーンキャスト プログラムの開発には、画面キャプチャのパフォーマンスの高い方法が必要です。 GDI の利用は標準的なアプローチですが、この記事では代替手法とそのパフォーマンスへの影響について説明します。
GDI のほかに、画面キャプチャには次の 2 つの方法が一般的です。
Windows Media API: DirectShow フィルターを利用して画面をキャプチャしますデータ。
DirectX: Direct3D 機能を採用してフレーム バッファーに直接アクセスします。
ハードウェア アクセラレーションを無効にすると、GPU をバイパスしてキャプチャ パフォーマンスが向上します。パイプライン、フレームの歪みを引き起こす可能性があります。
商用スクリーンキャスト ソフトウェアは、多くの場合、独自のキャプチャ ドライバーを採用しています。これらのドライバーはカーネル レベルで動作し、グラフィックス API 呼び出しをインターセプトし、フレーム バッファー データを効率的に取得します。
キャプチャ ドライバーの実装には次の作業が含まれます:
提供されているコード スニペットは、Direct3D を使用した画面キャプチャ方法を例にしています。
void dump_buffer() { IDirect3DSurface9* pRenderTarget=NULL; IDirect3DSurface9* pDestTarget=NULL; const char file[] = "Pickture.bmp"; HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget); hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width, DisplayMde.Height, DisplayMde.Format, D3DPOOL_SYSTEMMEM, &pDestTarget, NULL); hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget); hr = D3DXSaveSurfaceToFile(file, D3DXIFF_BMP, pDestTarget, NULL, NULL); pRenderTarget->Release(); pDestTarget->Release(); }
この手法では、単一のフレームをキャプチャし、ビットマップ ファイルに保存します。レンダー ターゲットと宛先サーフェスを開いたままにするようにコードを変更すると、画面データの継続的なストリーミングを実現できます。
以上がWindows スクリーンキャスト用にスクリーン キャプチャのパフォーマンスを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。