Compartilhar via


Efeito do 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 esse efeito é CLSID_D2D1DisplacementMap.

Imagem de exemplo

Antes
a imagem antes do efeito.
Depois
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(Deslocamento Bitmap (x,y)-0,5),y+ scale*(YChannelSelector(Deslocamento Bitmap (x,y))-0,5))

Onde:

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 do bitmap de deslocamento que desloca a imagem de entrada na direção X.
YChannelSelector a intensidade do canal RGBA selecionado do bitmap de deslocamento que desloca a imagem de entrada na direção Y.

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

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

Propriedades de efeito

Nome de exibição e enumeração de índice Tipo e valor padrão Descrição
Escala
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLUTUAR
0,0f
Multiplica a intensidade do canal selecionado da imagem de deslocamento. Quanto mais alta 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 desse canal de cores e a usa para deslocar espacialmente a imagem na direção X. Consulte Canais de cores para obter mais informações.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
O efeito extrai a intensidade desse canal de cores e a usa para deslocar espacialmente a imagem na direção Y. Consulte Canais de cores para obter mais informações.

Canais de cores

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 saída de intensidade do canal verde.
D2D1_CHANNEL_SELECTOR_B O efeito extrai a saída de intensidade 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)*(DPI do Usuário/96)

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Servidor mínimo com suporte Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect