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 de cet effet est CLSID_D2D1DisplacementMap.

Exemple d’image

Avant
image avant l’effet.
After
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 RGBA 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 RGBA sélectionné à partir de la bitmap de déplacement qui déplace l’image d’entrée dans la direction Y.

L’effet rééchantillonne 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 bilinéaire si l’échantillonnage à partir de pixels dans l’image d’entrée.

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

Propriétés de l’effet

Nom complet et énumération d’index Type et valeur par défaut Description
Scale
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOAT
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 couleurs et l’utilise pour déplacer spatialement l’image dans la direction X. Pour plus d’informations , consultez Canaux de couleurs.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
L’effet extrait l’intensité de ce canal de couleurs et l’utilise pour déplacer spatialement l’image dans la direction Y. Pour plus d’informations , consultez Canaux de couleurs.

Canaux de couleurs

É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 les équations suivantes :

Bitmap de sortie ? Pixels=(Taille de bitmap d’entrée?( DIPs)+Mise à l’échelle)*(Ppp utilisateur/96)

Bitmapde sortie y Pixels=(Taille de bitmap d’entréey(DIPs) + Échelle)*(Ppp utilisateur/96)

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