ホームページ >バックエンド開発 >C++ >Windows スクリーンキャスト用にスクリーン キャプチャのパフォーマンスを最適化するにはどうすればよいですか?

Windows スクリーンキャスト用にスクリーン キャプチャのパフォーマンスを最適化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 08:45:14462ブラウズ

How Can Screen Capture Performance Be Optimized for Windows Screencasting?

Windows でのスクリーンキャストの画面キャプチャ パフォーマンスの最適化

はじめに

スクリーンキャスト プログラムの開発には、画面キャプチャのパフォーマンスの高い方法が必要です。 GDI の利用は標準的なアプローチですが、この記事では代替手法とそのパフォーマンスへの影響について説明します。

代替キャプチャ方法

GDI のほかに、画面キャプチャには次の 2 つの方法が一般的です。

Windows Media API: DirectShow フィルターを利用して画面をキャプチャしますデータ。

DirectX: Direct3D 機能を採用してフレーム バッファーに直接アクセスします。

パフォーマンスの最大化

ハードウェア アクセラレーションを無効にすると、GPU をバイパスしてキャプチャ パフォーマンスが向上します。パイプライン、フレームの歪みを引き起こす可能性があります。

ドライバーベースCapture

商用スクリーンキャスト ソフトウェアは、多くの場合、独自のキャプチャ ドライバーを採用しています。これらのドライバーはカーネル レベルで動作し、グラフィックス API 呼び出しをインターセプトし、フレーム バッファー データを効率的に取得します。

カスタム キャプチャ ドライバーの実装

キャプチャ ドライバーの実装には次の作業が含まれます:

  • カーネルモードドライバーの作成
  • インターセプトの確立関数
  • フレーム バッファ メモリへのポインタを再調整

Microsoft のサンプル コード

提供されているコード スニペットは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。