Condividi tramite


Effetto mappa di spostamento

Usare l'effetto mappa di spostamento per spostare i pixel dell'immagine di input in base ai valori di intensità di una seconda immagine di input.

Il CLSID per questo effetto è CLSID_D2D1DisplacementMap.

Immagine di esempio

Prima
immagine prima dell'effetto.
After
l'immagine dopo la trasformazione.
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();

Le posizioni dei pixel nell'output vengono determinate usando questa formula:

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

Dove:

C (x, y) è il pixel di output in corrispondenza di (x, y).
C (x, y) è il pixel di input in corrispondenza di (x, y).
Bitmap di spostamento (x, y) è l'intensità del pixel di spostamento alle coordinate specificate
XChannelSelector l'intensità del canale RGBA selezionato dalla bitmap di spostamento che sposta l'immagine di input nella direzione X.
YChannelSelector l'intensità del canale RGBA selezionato dalla bitmap di spostamento che sposta l'immagine di input nella direzione Y.

L'effetto ricampiona l'immagine di input in base alla proprietà di scala e all'intensità dell'immagine di spostamento. Usa l'interpolazione bilineare se il campionamento da tra pixel nell'immagine di input.

Questo effetto funziona sulle immagini alfa dritte e premoltiplicate. Il formato alfa di output corrisponde al formato di input.

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Tipo e valore predefinito Descrizione
Scalabilità
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOAT
0,0f
Moltiplica l'intensità del canale selezionato dall'immagine di spostamento. Più alto si imposta questa proprietà, più l'effetto sposta i pixel
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
L'effetto estrae l'intensità da questo canale di colore e lo usa per spostare l'immagine nello spazio nella direzione X. Per altre informazioni, vedi Canali colore .
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
L'effetto estrae l'intensità da questo canale di colore e lo usa per spostare l'immagine nello spazio nella direzione Y. Per altre informazioni, vedi Canali colore .

Canali colore

Enumerazione Descrizione
D2D1_CHANNEL_SELECTOR_R L'effetto estrae l'output di intensità dal canale rosso.
D2D1_CHANNEL_SELECTOR_G L'effetto estrae l'output dell'intensità dal canale verde.
D2D1_CHANNEL_SELECTOR_B L'effetto estrae l'output di intensità dal canale blu.
D2D1_CHANNEL_SELECTOR_A L'effetto estrae l'output dell'intensità dal canale alfa.

Output Bitmap

È possibile determinare le dimensioni massime della bitmap di output con queste equazioni:

Bitmap di output? Pixel=(Dimensioni bitmap di input?( DIP)+Scala)*(DPI utente/96)

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

Requisiti

Requisito Valore
Client minimo supportato Windows 8 e aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Server minimo supportato Windows 8 e aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Intestazione d2d1effects.h
Libreria d2d1.lib, dxguid.lib

ID2D1Effect