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 |
---|
After |
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 enumeration | Type and default value | Description |
---|---|---|
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
Enumeration | Description |
---|---|
D2D1_CHANNEL_SELECTOR_R | The effect extracts the intensity output from the red channel. |
D2D1_CHANNEL_SELECTOR_G | The effect extracts the intensity output from the green channel. |
D2D1_CHANNEL_SELECTOR_B | The effect extracts the intensity output from the blue channel. |
D2D1_CHANNEL_SELECTOR_A | The 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 Bitmap? Pixels=(Input Bitmap Size?(DIPs)+Scale)*(User DPI/96)
Output Bitmapy Pixels=(Input Bitmap Sizey(DIPs) + Scale)*(User DPI/96)
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps] |
Minimum supported server | Windows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps] |
Header | d2d1effects.h |
Library | d2d1.lib, dxguid.lib |