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

Imagem de exemplo

Antes
a imagem antes do efeito.
After (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).
O Bitmap de Deslocamento (x, y) é a intensidade de 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 amostra novamente 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 retas e pré-multiplicadas. O formato alfa de saída é o mesmo que o formato de entrada.

Propriedades do efeito

Nome de exibição e enumeração de índice Tipo e valor padrão Descrição
Escala
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOAT
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 o usa para deslocar espacialmente a imagem na direção X. Confira 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 o usa para deslocar espacialmente a imagem na direção Y. Confira 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)

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

Requisitos

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

ID2D1Effect