比方說,我有一個高斯模糊效果ID2D1Effect *blur;
,我想應用位圖來獲得模糊圖像。我可以使用blur->SetInput(0, bitmap);
將位圖傳遞給效果,並使用blur->Get()
獲得輸出。現在我不想模糊存儲在磁盤上的圖像,我想模糊在renderTarget->BeginDraw()
和renderTarget->EndDraw()
之間創建的輸出。我的第一個想法是獲得輸出的位圖,但是我找不到用於檢索已渲染輸出的函數,也沒有找到將效果應用於renderTarget而不是加載位圖的方法。將效果應用於輸出而不是位圖?
小例子:
ID2D1SolidColorBrush *brush;
ID2D1HwndRenderTarget *renderTarget; // Instantiated somewhere else in code
renderTarget->CreateSolidColorBrush(D2D1::ColorF(0.0f, 0.6f, 1.0f), &bush);
renderTarget->BeginDraw();
renderTarget->Clear(D2D1::ColorF(0.0f, 0.0f, 0.0f));
renderTarget->FillRectangle(D2D1::RectF(50.0f, 50.0f, 100.0f, 100.0f), brush);
// Apply gaussian blur?
renderTarget->EndDraw();
brush->Release();
// renderTarget gets released somewhere else
我怎樣才能在模糊這個例子中,矩形?
EDIT(感謝enhzflep):
我能夠獲得已經呈現的輸出與下面的代碼段的位圖:
ID2D1BitmapRenderTarget *bitmapRenderTarget;
hwndRenderTarget->CreateCompatibleRenderTarget(&bitmapRenderTarget);
ID2D1Bitmap *bitmap;
bitmapRenderTarget->GetBitmap(&bitmap);
在我的代碼我已經測試了它通過獲取一個位圖,繪製它,最後將這個位圖繪製到hwndRenderTarget
上,它工作。在將位圖繪製回hwndRenderTarget
之前,我想對其應用效果(例如高斯模糊)。但是這會導致下一個問題(我不知道是否應該開放一個新主題,所以我在此處發佈):ID2D1Effect
接口只能從ID2D1DeviceContext
的實例中實例化,該實例僅適用於Windows 8.我不能想象一下微軟將ID2D1Effect
限制到Windows 8,所以必須有另一種方式。 有誰知道另一種方式來安裝一個ID2D1Effect
接口?
編輯2:
我也貼在MSDN上這個問題終於得到了answer。我必須安裝Platform Update for Win7 SP1 (KB2670838)和Win8 SDK(也適用於Win7)才能在Win7上使用Win8頭文件。
(以下最終解答爲答案)
我懷疑這個想法是渲染場景到位圖,過濾器,然後顯示結果。 – enhzflep 2014-11-01 14:22:30
因此改爲使用HwndRenderTarget進行渲染,我應該使用BitmapRenderTarget? – Cubinator73 2014-11-01 15:45:52
聽起來像是一個可能的候選人。 (我根本不知道DX) – enhzflep 2014-11-01 22:48:52