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


Эффект тени

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

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. Единицы стандартного отклонения и радиуса размытия являются diPs.
Это свойство совпадает со свойством 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}.
Оптимизация
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 (diPs)*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