Displacement map effect

Use the displacement map effect to displace the pixels of the input image by the intensity values of a second input image.

The CLSID for this effect is CLSID_D2D1DisplacementMap.

Example image

Before
The image before the effect.
After
The image after the transform.

 


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();

The locations of the pixels in the output are determined using this formula:

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

Where:

C’ (x, y) is the output pixel at (x, y).
C (x, y) is the input pixel at (x, y).
Displacement Bitmap (x, y) is the displacement pixel intensity at the specified coordinates
XChannelSelector the intensity of the selected RGBA channel from the displacement bitmap that displaces the input image in the X direction.
YChannelSelector the intensity of the selected RGBA channel from the displacement bitmap that displaces the input image in the Y direction.

The effect resamples the input image according to the scale property and the intensity of the displacement image. It uses bilinear interpolation if sampling from between pixels in the input image.

This effect works on straight and premultiplied alpha images. The output alpha format is the same as the input format.

Effect properties

Display name and index enumerationType and default valueDescription

Scale

D2D1_DISPLACEMENTMAP_PROP_SCALE

FLOAT

0.0f

Multiplies the intensity of the selected channel from the displacement image. The higher you set this property, the more the effect displaces the pixels

XChannelSelect

D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT

D2D1_CHANNEL_SELECTOR

D2D1_CHANNEL_SELECTOR_A

The effect extracts the intensity from this color channel and uses it to spatially displace the image in the X direction. See Color channels for more info.

YChannelSelect

D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT

D2D1_CHANNEL_SELECTOR

D2D1_CHANNEL_SELECTOR_A

The effect extracts the intensity from this color channel and uses it to spatially displace the image in the Y direction. See Color channels for more info.

 

Color channels

EnumerationDescription
D2D1_CHANNEL_SELECTOR_RThe effect extracts the intensity output from the red channel.
D2D1_CHANNEL_SELECTOR_GThe effect extracts the intensity output from the green channel.
D2D1_CHANNEL_SELECTOR_BThe effect extracts the intensity output from the blue channel.
D2D1_CHANNEL_SELECTOR_AThe effect extracts the intensity output from the alpha channel.

 

Output Bitmap

You can determine the maximum size of the output bitmap with these equations:

Output Bitmapx Pixels=(Input Bitmap Sizex(DIPs)+Scale)*(User DPI/96)

Output Bitmapy Pixels=(Input Bitmap Sizey(DIPs) + Scale)*(User DPI/96)

Requirements

Minimum supported clientWindows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps]
Minimum supported serverWindows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps]
Headerd2d1effects.h
Libraryd2d1.lib, dxguid.lib

 

Related topics

ID2D1Effect

 

 

Community Additions

ADD
Show:
© 2014 Microsoft