Compartir a través de


Efecto de mapa de desplazamiento

Use el efecto de mapa de desplazamiento para desplazar los píxeles de la imagen de entrada por los valores de intensidad de una segunda imagen de entrada.

El CLSID de este efecto es CLSID_D2D1DisplacementMap.

Imagen de ejemplo

Antes
la imagen antes del efecto.
Después
la imagen después de la transformación.
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();

Las ubicaciones de los píxeles de la salida se determinan mediante esta fórmula:

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

Donde:

C (x, y) es el píxel de salida en (x, y).
C (x, y) es el píxel de entrada en (x, y).
El mapa de bits de desplazamiento (x, y) es la intensidad del píxel de desplazamiento en las coordenadas especificadas.
XChannelSelector la intensidad del canal RGBA seleccionado del mapa de bits de desplazamiento que desplaza la imagen de entrada en la dirección X.
YChannelSelector la intensidad del canal RGBA seleccionado del mapa de bits de desplazamiento que desplaza la imagen de entrada en la dirección Y.

El efecto reemplea la imagen de entrada según la propiedad de escala y la intensidad de la imagen de desplazamiento. Usa la interpolación bilineal si el muestreo de entre píxeles de la imagen de entrada.

Este efecto funciona en imágenes alfa rectas y premultiplicadas. El formato alfa de salida es el mismo que el formato de entrada.

Propiedades de efecto

Enumeración de nombre para mostrar e índice Tipo y valor predeterminado Descripción
Escala
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOAT
0.0f
Multiplica la intensidad del canal seleccionado a partir de la imagen de desplazamiento. Cuanto mayor establezca esta propiedad, más el efecto desplaza los píxeles.
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
El efecto extrae la intensidad de este canal de color y la usa para desplazar espacialmente la imagen en la dirección X. Consulta Canales de color para obtener más información.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
El efecto extrae la intensidad de este canal de color y la usa para desplazar espacialmente la imagen en la dirección Y. Consulta Canales de color para obtener más información.

Canales de color

Enumeración Descripción
D2D1_CHANNEL_SELECTOR_R El efecto extrae la salida de intensidad del canal rojo.
D2D1_CHANNEL_SELECTOR_G El efecto extrae la salida de intensidad del canal verde.
D2D1_CHANNEL_SELECTOR_B El efecto extrae la salida de intensidad del canal azul.
D2D1_CHANNEL_SELECTOR_A El efecto extrae la salida de intensidad del canal alfa.

Mapa de bits de salida

Puede determinar el tamaño máximo del mapa de bits de salida con estas ecuaciones:

¿Mapa de bits de salida? Pixels=(Input Bitmap Size?( DIPs)+Scale)*(User DPI/96)

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect