私は、ビットマップ(現在は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でそれを作る方法は?
私の問題を解決する方法についてのアイデアを事前に感謝します。