画面を迅速にキャプチャ: Windows のスクリーンキャスト方法を詳しく調べる
Windows でスクリーンキャスト アプリケーションを作成することを追求し、最も効率的な方法を選択します。画面キャプチャの方法が重要です。 GDI は使い慣れたツールですが、パフォーマンスのオーバーヘッドを最小限に抑えるためには、代替アプローチを検討することが正当です。
Windows Media API と DirectX の出現により、新しい画面キャプチャの可能性が導入されました。ただし、ハードウェア アクセラレーションを無効にするとキャプチャ パフォーマンスが向上する理由を理解することは依然として興味深い課題です。この改善は、レンダリングと合成に関連する操作が減り、より効率的なリソース割り当てが可能になったことによって生じています。
Camtasia などのアプリケーションで採用されているカスタム キャプチャ ドライバーは、基礎となるグラフィックスをインターセプトする特殊なコードを利用することで、並外れた速度を実現します。 API を使用してバック バッファからデータを直接抽出します。この手法はフロント バッファをバイパスし、ビデオ RAM の代わりにシステム RAM を利用するため、パフォーマンスが大幅に向上します。
カスタム キャプチャ ドライバの技術的実装
カスタム キャプチャ ドライバの実装キャプチャ ドライバーには、グラフィックス API を深く理解し、システム コールをインターセプトするコードを作成する能力が必要です。プロセスの簡略化された概要は次のとおりです。
既存のドキュメント洞察を提供するには、カスタム キャプチャ ドライバーの開発と展開には、技術的な専門知識と基礎となるシステムの完全な理解が必要です。
単一フレームをキャプチャするためのサンプル コード
キャプチャ用単一フレームの場合は、次のコード スニペットを検討してください:
void dump_buffer() { IDirect3DSurface9* pRenderTarget=NULL; IDirect3DSurface9* pDestTarget=NULL; const char file[] = "Pickture.bmp"; // sanity checks. if (Device == NULL) return; // get the render target surface. HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget); // get the current adapter display mode. //hr = pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddisplaymode); // create a destination surface. hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width, DisplayMde.Height, DisplayMde.Format, D3DPOOL_SYSTEMMEM, &pDestTarget, NULL); //copy the render target to the destination surface. hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget); //save its contents to a bitmap file. hr = D3DXSaveSurfaceToFile(file, D3DXIFF_BMP, pDestTarget, NULL, NULL); // clean up. pRenderTarget->Release(); pDestTarget->Release(); }
このコードは、オープン レンダー ターゲットを維持し、ファイル命名用の静的カウンター。
以上がカスタム キャプチャ ドライバーは Windows でのスクリーンキャストのパフォーマンスをどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。