Efecto de sombra

Use el efecto de sombra para generar una sombra a partir del canal alfa de una imagen. La sombra es más opaca para valores alfa más altos y más transparente para los valores alfa inferiores. Puede establecer la cantidad de desenfoque y el color de la sombra.

El CLSID de este efecto es CLSID_D2D1Shadow.

Imagen de ejemplo

En el ejemplo siguiente se muestra la salida del efecto de sombra traducida hacia abajo y derecha con la imagen de origen compuesta sobre ella en la ubicación original. El efecto de sombra solo genera la sombra.

Antes
la imagen antes del efecto.
Después
la imagen después de la transformación.
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();

Propiedades de efecto

Enumeración de índice y nombre para mostrar Descripción
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
Cantidad de desenfoque que se va a aplicar al canal alfa de la imagen. Puede calcular el radio de desenfoque del kernel multiplicando la desviación estándar por 3. Las unidades de la desviación estándar y el radio de desenfoque son DIP.
Esta propiedad es la misma que la propiedad de desviación estándar Desenfoque gaussiana .
El tipo es FLOAT.
El valor predeterminado es 3.0f.
Color
D2D1_SHADOW_PROP_COLOR
Color de la sombra paralela. Esta propiedad es un D2D1_VECTOR_4F definido como: (R, G, B, A). Debe especificar este color en alfa recto.
El tipo es D2D1_VECTOR_4F.
El valor predeterminado es {0.0f, 0.0f, 0.0f, 1.0f}.
Optimization
D2D1_SHADOW_PROP_OPTIMIZATION
Nivel de optimización del rendimiento.
El tipo es D2D1_SHADOW_OPTIMIZATION.
El valor predeterminado es D2D1_SHADOW_OPTIMIZATION_BALANCED.

Modos de optimización

Nombre Descripción
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Aplica optimizaciones internas, como el escalado previo a los radios relativamente pequeños. Usa el filtrado lineal.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Usa los mismos umbrales de optimización que el modo Velocidad, pero usa el filtrado trilineal.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Solo usa optimizaciones internas con radios de desenfoque grandes, donde es menos probable que las aproximaciones sean visibles. Usa el filtrado trilineal.

Mapa de bits de salida

El tamaño del mapa de bits de salida es el tamaño de la salida de desenfoque. La cantidad de crecimiento del mapa de bits de salida en relación con el mapa de bits original se puede calcular mediante la siguiente ecuación:

Crecimiento del mapa de bits de salida (X e Y) = BlurStandardDeviation (píxeles independientes del dispositivo (DIP))*6*(PPP de usuario)/96

La salida aumenta igualmente en todas las direcciones, por lo que, por ejemplo, si el tamaño aumenta en 10 píxeles en cada dirección, la esquina superior izquierda del mapa de bits se encuentra en (-5, -5) y la parte inferior derecha estará en (105, 105) como se muestra en el diagrama aquí.

Diagrama de crecimiento del tamaño de salida del efecto sombra.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y Actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible Windows 8 y Actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect