2

私は、ビットマップ(現在はHBITMAP / bitblt / alphablend)をすべての表示ウィンドウ(つまり、アプリケーションに属していないウィンドウ)の非クライアント領域にペイントすることをタスクとする特定のプロジェクトに取り組んでいます。これは非常に高速に実行する必要があります。ウィンドウを移動したり、サイズを変更したりすると、ビットマップが更新されます。また、このビットマップに何らかのぼかしアルゴリズムを適用する必要があります。Win7とWin8で動作するはずです(したがって、XPは必要ありません)。

私はGDIで適切に動作することができました。GetWindowDC、GetWindowRect、AlphaBlendビットマップをバッファー(CreateCompatibleDC / CreateCompatibleBitmap)に取得し、それをGetWindowDCにBitBltします。これは完璧に機能します...ただし...私が望むほど速くはありません。そして、ビットマップにぼかしアルゴリズムを適用すると、すべてが地獄のように遅くなります。

だから私の質問は、速度を改善する方法ですか?ハードウェアアクセラレーションによる描画を考えています。

a)GDI互換のDirect2D(ID2D1DCRenderTarget + BindDCを使用)を試しましたが、純粋なGDIよりもはるかに低速です。

b)Direct3Dについて考えています。問題は、おそらくそれを使用する方法がわからないということです。スワップチェーンのOutputWindowをアプリケーションのHWNDに設定してD3D10CreateDeviceAndSwapChainを呼び出すと、S_OKが返されますが、OutputWindowを任意の外部ウィンドウのHWNDに設定すると、メソッドは失敗します。そのため、外部ウィンドウにレンダリングする方法がわかりません。

c)画像の一部にぼかしを適切に適用する方法は?多くのアルゴリズムを見つけましたが、それらはすべてCPUで処理されます。GPUでそれを作る方法は?

私の問題を解決する方法についてのアイデアを事前に感謝します。

4

1 に答える 1

0

DCompの使用について考えたことはありますか?DCompの使用が適切である理由については、次を参照してください:http: //msdn.microsoft.com/en-us/library/windows/desktop/hh449195%28v=vs.85%29.aspx

DCompとは何かの簡単な要約(MSDNから):

Microsoft DirectCompositionは、変換、効果、およびアニメーションを使用した高性能のビットマップ構成を可能にするWindowsコンポーネントです。アプリケーション開発者は、DirectComposition APIを使用して、あるビジュアルから別のビジュアルへのリッチで滑らかなアニメーショントランジションを特徴とする視覚的に魅力的なユーザーインターフェイスを作成できます。

DirectCompositionは、高フレームレートを実現し、グラフィックハードウェアを使用し、UIスレッドとは独立して動作することにより、リッチで滑らかなトランジションを可能にします。DirectCompositionは、Microsoft DirectXビットマップやウィンドウにレンダリングされたビットマップ(HWNDビットマップ)など、さまざまなレンダリングライブラリによって描画されたビットマップコンテンツを受け入れることができます。また、DirectCompositionは、2Dアフィン変換や3D遠近法変換などのさまざまな変換に加えて、クリッピングや不透明度などの基本的な効果をサポートします。

DirectCompositionは、ビジュアルの作成とアニメーション化されたトランジションの作成のプロセスを簡素化するように設計されています。アプリケーションにすでにレンダリングコードが含まれている場合、または推奨されるDirectX APIをすでに使用している場合は、DirectCompositionを効果的に使用するために最小限の作業を行うだけで済みます。

于 2013-02-01T08:21:08.290 に答える