2012-12-16 43 views
2

我正在某個項目的任務是繪製位圖(當前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上?

在此先感謝您的任何想法如何解決我的問題。

回答

0

你有沒有想過使用DComp?對於爲什麼使用DCOMP可能是合適的,看看這個:http://msdn.microsoft.com/en-us/library/windows/desktop/hh449195%28v=vs.85%29.aspx

對於DCOMP就是一個小結(從MSDN):

微軟DirectComposition是一個Windows組件,使高性能的位圖構成與轉換,效果和動畫。應用程序開發人員可以使用DirectComposition API創建視覺上吸引人的用戶界面,從一個視覺到另一個視覺呈現豐富而流暢的動畫過渡。

DirectComposition通過實現高幀率,使用圖形硬件並獨立於UI線程進行操作,實現了豐富而流暢的轉換。 DirectComposition可以接受由不同的渲染庫(包括Microsoft DirectX位圖和渲染到窗口的位圖(HWND位圖))繪製的位圖內容。此外,DirectComposition支持多種轉換,例如2D仿射變換和3D透視變換,以及裁剪和不透明等基本效果。

DirectComposition旨在簡化組成視覺效果和創建動畫過渡的過程。如果您的應用程序已經包含渲染代碼或已經使用推薦的DirectX API,則只需進行少量工作即可有效使用DirectComposition。