Предположим, у меня есть эффект гауссовского размытия 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. Я не могу представьте, что Microsoft ограничивает ID2D1Effect
Windows 8, поэтому должен быть другой способ. Кто-нибудь знает другой способ созданияID2D1Effect
интерфейс?
EDIT 2:
Я также отвечал на этот вопрос на MSDN и, наконец, получил answer. Мне пришлось установить Platform Update for Win7 SP1 (KB2670838) и Win8 SDK (также работает на Win7), чтобы использовать Win8-заголовки на Win7.
(Окончательное решение ниже в качестве ответа)
Я подозреваю, что идея состоит в том, чтобы сделать сцену растровым, фильтровать, а затем показать результат. – enhzflep
Итак, вместо использования HwndRenderTarget для рендеринга, я должен использовать BitmapRenderTarget? – Cubinator73
Звучит как вероятный кандидат. (Я вообще не знаю DX) – enhzflep