Dela via


Effekt på förskjutningskarta

Använd förskjutningskartans effekt för att förskjuta bildpunkterna i indatabilden med hjälp av intensitetsvärdena för en andra indatabild.

CLSID för den här effekten är CLSID_D2D1DisplacementMap.

Exempelbild

Före
bilden före effekten.
Efter
bilden efter transformen.
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();

Platserna för bildpunkterna i utdata bestäms med hjälp av den här formeln:

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

Var:

C (x, y) är utdatapixel vid (x, y).
C (x, y) är indatapixel på (x, y).
förskjutningsbitmapp (x, y) är förskjutningspixelintensiteten vid de angivna koordinaterna
XChannelSelector intensiteten för den valda RGBA-kanalen från förskjutningsbitmappen som förskjuter indatabilden i X-riktningen.
YChannelSelector intensiteten för den valda RGBA-kanalen från förskjutningsbitmappen som förskjuter indatabilden i Y-riktningen.

Effekten omsamplar indatabilden enligt skalningsegenskapen och förskjutningsbildens intensitet. Den använder bilinearinterpolation om sampling från mellan bildpunkter i indatabilden.

Den här effekten fungerar på raka och förmultiplierade alfabilder. Alfaformatet för utdata är detsamma som indataformatet.

Effektegenskaper

Visningsnamn och indexuppräkning Typ- och standardvärde Beskrivning
Skala
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLYTA
0.0f
Multiplicerar intensiteten för den valda kanalen från förskjutningsbilden. Ju högre du anger den här egenskapen, desto mer förskjuter effekten bildpunkterna
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
Effekten extraherar intensiteten från den här färgkanalen och använder den för att förskjuta bilden i X-riktningen. Mer information finns i Färgkanaler.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
Effekten extraherar intensiteten från den här färgkanalen och använder den för att rumsligt förskjuta bilden i Y-riktningen. Mer information finns i Färgkanaler.

Färgkanaler

Uppräkning Beskrivning
D2D1_CHANNEL_SELECTOR_R Effekten extraherar intensitetsutdata från den röda kanalen.
D2D1_CHANNEL_SELECTOR_G Effekten extraherar intensitetsutdata från den gröna kanalen.
D2D1_CHANNEL_SELECTOR_B Effekten extraherar intensitetsutdata från den blå kanalen.
D2D1_CHANNEL_SELECTOR_A Effekten extraherar intensitetsutdata från alfakanalen.

Utdatabitmapp

Du kan fastställa den maximala storleken på utdatabitmappen med följande ekvationer:

Utdatabitmapp? Pixels=(Indatabitmappsstorlek?( DIPs)+Scale)*(User DPI/96)

Utdatabitmappy Pixels=(Indatabitmappsstorleky(DIPs) + skala)*(Användar-DPI/96)

Krav

Krav Värde
Lägsta klient som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Lägsta server som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Rubrik d2d1effects.h
Bibliotek d2d1.lib, dxguid.lib

ID2D1Effect