我正在某個項目的任務是繪製位圖(當前HBITMAP/bitblt/alphablend)到所有可見窗口的非客戶區域窗口不屬於我的應用程序)。它必須做得非常快 - 當窗口被移動,調整大小等時,位圖被更新。此外,還必須在該位圖上應用某種模糊算法。它應該在Win7和Win8上工作(所以不需要XP)。快速(HW加速)繪圖到外國窗口(可能使用Direct3D)
我已經設法與GDI正常工作。我將GetWindowDC,GetWindowRect和AlphaBlend位圖獲取到緩衝區中(CreateCompatibleDC/CreateCompatibleBitmap),然後將其BitBlt轉換爲GetWindowDC。這完美的工作...除了...它沒有我想要的那麼快。如果我在位圖上應用模糊算法,那麼一切都很慢。
所以我的問題是如何提高速度?我正在考慮硬件加速繪圖。
a)我嘗試了GDI兼容的Direct2D(使用ID2D1DCRenderTarget + BindDC),但它比純粹的GDI慢得多。
b)我正在考慮Direct3D。問題是我可能不知道如何使用它。如果我調用D3D10CreateDeviceAndSwapChain並將交換鏈的OutputWindow設置爲我的應用程序的HWND,那麼它將返回S_OK,但是當我將OutputWindow設置爲任何外部窗口的HWND時,該方法將失敗。所以我不確定如何渲染到外部窗口。
c)如何正確地應用圖像的一部分模糊?我發現了很多算法,但是它們都是在CPU上處理的。如何使它在GPU上?
在此先感謝您的任何想法如何解決我的問題。