Partager via


Effet de carte de déplacement

Utilisez l’effet de carte de déplacement pour déplacer les pixels de l’image d’entrée par les valeurs d’intensité d’une deuxième image d’entrée.

Le CLSID pour cet effet est CLSID_D2D1DisplacementMap.

Exemple d’image

Avant
l’image avant l’effet.
Après
l’image après la transformation.
ComPtr<ID2D1Effect> displacementMapEffect;
m_d2dContext->CreateEffect(CLSID_D2D1DisplacementMap, &displacementMapEffect);

displacementMapEffect->SetInput(0, bitmap);
displacementMapEffect->SetValue(D2D1_DISPLACEMENTMAP_PROP_SCALE, 100.0f);

// The second input of the displacement effect determines how the input image is transformed.
// For this example, we will use a turbulence effect as the second input to randomly distort the image.
ComPtr<ID2D1Effect> turbulenceEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Turbulence, &turbulenceEffect);
displacementMapEffect->SetInputEffect(1, turbulenceEffect.Get());

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

Les emplacements des pixels dans la sortie sont déterminés à l’aide de cette formule :

C'(x,y)=C(x+ scale*(XChannelSelector(Displacement Bitmap (x,y))-0.5),y+ scale*(YChannelSelector(Displacement Bitmap (x,y))-0.5))

Où:

C (x, y) est le pixel de sortie à (x, y).
C (x, y) est le pixel d’entrée à (x, y).
bitmap de déplacement (x, y) est l’intensité du pixel de déplacement aux coordonnées spécifiées
XChannelSelector l’intensité du canal RVBA sélectionné à partir de la bitmap de déplacement qui déplace l’image d’entrée dans la direction X.
YChannelSelector l’intensité du canal RVBA sélectionné à partir de la bitmap de déplacement qui déplace l’image d’entrée dans la direction Y.

L’effet rééchantille l’image d’entrée en fonction de la propriété d’échelle et de l’intensité de l’image de déplacement. Il utilise l’interpolation biligne si l’échantillonnage entre les pixels de l’image d’entrée est effectué.

Cet effet fonctionne sur des images alpha droites et prémultipliées. Le format alpha de sortie est identique au format d’entrée.

Propriétés d’effet

Nom complet et énumération d’index Type et valeur par défaut Description
Écaille
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOTTER
0.0f
Multiplie l’intensité du canal sélectionné à partir de l’image de déplacement. Plus vous définissez cette propriété, plus l’effet déplace les pixels
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
L’effet extrait l’intensité de ce canal de couleur et l’utilise pour déplacer spatialement l’image dans la direction X. Pour plus d’informations, consultez canaux Color.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
L’effet extrait l’intensité de ce canal de couleur et l’utilise pour déplacer spatialement l’image dans la direction Y. Pour plus d’informations, consultez canaux Color.

Canaux de couleur

Énumération Description
D2D1_CHANNEL_SELECTOR_R L’effet extrait la sortie d’intensité du canal rouge.
D2D1_CHANNEL_SELECTOR_G L’effet extrait la sortie d’intensité du canal vert.
D2D1_CHANNEL_SELECTOR_B L’effet extrait la sortie d’intensité du canal bleu.
D2D1_CHANNEL_SELECTOR_A L’effet extrait la sortie d’intensité du canal alpha.

Bitmap de sortie

Vous pouvez déterminer la taille maximale de la bitmap de sortie avec ces équations :

Bitmap de sortie ? Pixels=(Taille de bitmap d’entrée ?( DIPs)+Scale)*(User DPI/96)

Sortie bitmapy Pixels=(Taille de bitmap d’entréey(DIPs) + Échelle)*(PPP utilisateur/96)

Exigences

Exigence Valeur
Client minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimum 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