Partilhar via


Efeito de mapa de deslocamento

Use o efeito de mapa de deslocamento para deslocar os pixels da imagem de entrada pelos valores de intensidade de uma segunda imagem de entrada.

O CLSID para este efeito é CLSID_D2D1DisplacementMap.

Imagem de exemplo

Antes
a imagem antes do efeito.
Após
a imagem após a transformação.
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();

Os locais dos pixels na saída são determinados usando 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))

Em que:

C (x, y) é o pixel de saída em (x, y).
C (x, y) é o pixel de entrada em (x, y).
Bitmap de deslocamento (x, y) é a intensidade do pixel de deslocamento nas coordenadas especificadas
XChannelSelector a intensidade do canal RGBA selecionado a partir do bitmap de deslocamento que desloca a imagem de entrada na direção X.
YChannelSelector a intensidade do canal RGBA selecionado a partir do bitmap de deslocamento que desloca a imagem de entrada na direção Y.

O efeito refaz a amostragem da imagem de entrada de acordo com a propriedade da escala e a intensidade da imagem de deslocamento. Ele usa interpolação bilinear se a amostragem de entre pixels na imagem de entrada.

Este efeito funciona em imagens alfa retas e pré-multiplicadas. O formato alfa de saída é o mesmo que o formato de entrada.

Propriedades do efeito

Nome para exibição e enumeração de índice Tipo e valor padrão Descrição
Escala
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLUTUAR
0,0 f
Multiplica a intensidade do canal selecionado a partir da imagem de deslocamento. Quanto mais você definir essa propriedade, mais o efeito deslocará os pixels
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
O efeito extrai a intensidade deste canal de cor e usa-o para deslocar espacialmente a imagem na direção X. Consulte de canais coloridos para obter mais informações.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
O efeito extrai a intensidade deste canal de cor e usa-o para deslocar espacialmente a imagem na direção Y. Consulte de canais coloridos para obter mais informações.

Canais de cor

Enumeração Descrição
D2D1_CHANNEL_SELECTOR_R O efeito extrai a saída de intensidade do canal vermelho.
D2D1_CHANNEL_SELECTOR_G O efeito extrai a intensidade de saída do canal verde.
D2D1_CHANNEL_SELECTOR_B O efeito extrai a intensidade de saída do canal azul.
D2D1_CHANNEL_SELECTOR_A O efeito extrai a saída de intensidade do canal alfa.

Bitmap de saída

Você pode determinar o tamanho máximo do bitmap de saída com estas equações:

Bitmap de saída? Pixels=(Tamanho do bitmap de entrada?( DIPs)+Escala)*(Usuário DPI/96)

Bitmap de saíday Pixels=(Tamanho do bitmap de entraday(DIPs) + Escala)*(DPI do usuário/96)

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect