Partager via


Effet d’ombre

Utilisez l’effet d’ombre pour générer une ombre à partir du canal alpha d’une image. L’ombre est plus opaque pour les valeurs alpha plus élevées et plus transparente pour les valeurs alpha inférieures. Vous pouvez définir la quantité de flou et la couleur de l’ombre.

Le CLSID de cet effet est CLSID_D2D1Shadow.

Exemple d’image

L’exemple ci-dessous montre la sortie de l’effet d’ombre traduit vers le bas et vers la droite avec l’image source composite à l’emplacement d’origine. L’effet d’ombre génère uniquement l’ombre.

Avant
image avant l’effet.
After
image après la transformation.
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();

Propriétés d’effet

Nom d’affichage et énumération d’index Description
BlurStandardDeviation
D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION
Quantité de flou à appliquer au canal alpha de l’image. Vous pouvez calculer le rayon de flou du noyau en multipliant l’écart-type par 3. Les unités de l’écart-type et du rayon de flou sont des DIPs.
Cette propriété est identique à la propriété d’écart type Gaussian Blur .
Le type est FLOAT.
La valeur par défaut est 3.0f.
Color
D2D1_SHADOW_PROP_COLOR
Couleur de l'ombre portée. Cette propriété est une D2D1_VECTOR_4F définie comme suit : (R, G, B, A). Vous devez spécifier cette couleur en alpha droit.
Le type est D2D1_VECTOR_4F.
La valeur par défaut est {0.0f, 0.0f, 0.0f, 1.0f}.
Optimisation
D2D1_SHADOW_PROP_OPTIMIZATION
Niveau d’optimisation des performances.
Le type est D2D1_SHADOW_OPTIMIZATION.
La valeur par défaut est D2D1_SHADOW_OPTIMIZATION_BALANCED.

Modes d’optimisation

Nom Description
D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED Applique des optimisations internes telles que la pré-mise à l’échelle à des rayons relativement petits. Utilise le filtrage linéaire.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED Utilise les mêmes seuils d’optimisation que le mode Vitesse, mais utilise le filtrage triligne.
D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY Utilise uniquement des optimisations internes avec de grands rayons de flou, où les approximations sont moins susceptibles d’être visibles. Utilise le filtrage triligne.

Bitmap de sortie

La taille de l’image bitmap de sortie correspond à la taille de la sortie de flou. Le montant de la croissance de la bitmap de sortie par rapport à la bitmap d’origine peut être calculé à l’aide de l’équation suivante :

Croissance des bitmaps de sortie (X et Y) = BlurStandardDeviation (pixels indépendants de l’appareil (DIPs))*6*(DPI utilisateur)/96

La sortie augmente également dans toutes les directions. Par exemple, si la taille augmente de 10 pixels dans chaque direction, le coin supérieur gauche de la bitmap se trouve à (-5, -5) et l’angle inférieur droit est à (105, 105), comme illustré dans le diagramme ici.

Diagramme de croissance de la taille de la sortie de l’effet d’ombre.

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect