Поделиться через


Эффект тени

Используйте эффект тени для создания тени из альфа-канала изображения. Тень является более непрозрачной для более высоких альфа-значений и более прозрачной для более низких альфа-значений. Можно задать величину размытия и цвет тени.

CLSID для этого эффекта CLSID_D2D1Shadow.

Пример изображения

В приведенном здесь примере показаны выходные данные эффекта тени, преобразованные вниз и вправо с исходным изображением, составным над ним в исходном расположении. Эффект тени выводит только тень.

До
изображение перед эффектом.
После
изображение после преобразования.
ComPtr<ID2D1Effect> shadowEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Shadow, &shadowEffect);

shadowEffect->SetInput(0, bitmap);

// Shadow is composited on top of a white surface to show opacity.
ComPtr<ID2D1Effect> floodEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Flood, &floodEffect);

floodEffect->SetValue(D2D1_FLOOD_PROP_COLOR, D2D1::Vector4F(1.0f, 1.0f, 1.0f, 1.0f));

ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInputEffect(0, shadowEffect.Get());

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F::Translation(20, 20));

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

ComPtr<ID2D1Effect> compositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Composite, &compositeEffect);

compositeEffect->SetInputEffect(0, floodEffect.Get());
compositeEffect->SetInputEffect(1, affineTransformEffect.Get());
compositeEffect->SetInput(2, bitmap);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(compositeEffect.Get());
m_d2dContext->EndDraw();

Свойства эффекта

Отображаемое перечисление имен и индексов Описание
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
Величина размытия, применяемая к альфа-каналу изображения. Радиус размытия ядра можно вычислить, умножив стандартное отклонение на 3. Единицами стандартного отклонения и радиуса размытия являются DIP.
Это свойство совпадает со свойством стандартного отклонения Gaussian Blur .
Тип — FLOAT.
Значение по умолчанию — 3,0f.
Цвет
D2D1_SHADOW_PROP_COLOR
Цвет тени. Это свойство является D2D1_VECTOR_4F определяется следующим образом: (R, G, B, A). Этот цвет необходимо указать в прямом альфа-канале.
Тип — D2D1_VECTOR_4F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f, 1.0f}.
Optimization
D2D1_SHADOW_PROP_OPTIMIZATION
Уровень оптимизации производительности.
Тип — D2D1_SHADOW_OPTIMIZATION.
Значение по умолчанию — D2D1_SHADOW_OPTIMIZATION_BALANCED.

Режимы оптимизации

Имя Описание
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Применяет внутренние оптимизации, например предварительное масштабирование с относительно небольшими радиусами. Использует линейную фильтрацию.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Использует те же пороговые значения оптимизации, что и в режиме скорости, но использует трилинейную фильтрацию.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Использует только внутренние оптимизации с большими радиусами размытия, где приближения будут менее видны. Использует трилинейную фильтрацию.

Выходное растровое изображение

Размер выходного растрового изображения равен размеру выходных данных размытия. Величину увеличения выходного растрового рисунка относительно исходного растрового рисунка можно вычислить с помощью следующего уравнения:

Увеличение размера растрового изображения вывода (X и Y) = BlurStandardDeviation (аппаратно-независимые пиксели (DIP))*6*(user DPI)/96

Выходные данные увеличиваются одинаково во всех направлениях, поэтому, например, если размер увеличивается на 10 пикселей в каждом направлении, левый верхний угол растрового изображения находится в (-5, -5), а правый нижний — в (105, 105), как показано на схеме здесь.

диаграмма увеличения размера выходных данных эффектов тени.

Требования

Требование Значение
Минимальная версия клиента Windows 8 и обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Минимальная версия сервера Windows 8 и обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Заголовок d2d1effects.h
Библиотека d2d1.lib, dxguid.lib

ID2D1Effect