Dela via


Aritmetisk sammansatt effekt

Använd den aritmetiska sammansatta effekten för att kombinera 2 bilder med en viktad summa bildpunkter från indatabilderna.

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

Formel

Formeln här används för att beräkna den här effekten.

Utdatargba = C1 * Källargba * Målrgba + C2 * Källargba + C3 * Målrgba + C4

Där C1, C2, C3, C4 är koefficienter som du anger.

Koefficienterna mappas till värdena i en D2D1_VECTOR_4F (x, y, z, w):

  • x = C1
  • y = C2
  • z = C3
  • w = C4

Exempelbild

Ett enkelt exempel är att lägga till käll- och målpixlarna. I exemplet sammanfogas två rundade rektanglar. Källrektangeln är blå och målet är rött.

Bilden här är utdata från den aritmetiska sammansatta effekten med ekvationens koefficienter inställda på värdena här.

  • C1 = 0
  • C2 = 1
  • C3 = 1
  • C4 = 0

en exempelbild som visar 2 rundade rektanglar av samma storlek som överlappar med hjälp av den aritmetiska sammansatta effekten.

Resultatet är att pixelvärdena för källan och målet läggs till. De regioner där rektanglarna inte överlappar RGBA-värdena är alla 0. Där rektanglarna överlappar färgen är magenta eftersom både R- och B-värdena är högst.

Här är en annan exempelbild med kod.

Före bild 1
den första källbilden före effekten.
Före bild 2
den andra bilden före effekten.
Efter
bilden efter transformen.
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);

arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(arithmeticCompositeEffect.Get());
m_d2dContext->EndDraw();

Effektegenskaper

Visningsnamn och indexuppräkning Beskrivning
Koefficienter
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Koefficienterna för den ekvation som används för att sammanställa de två indatabilderna. Koefficienterna är enhetslösa och obundna. Typen är D2D1_VECTOR_4F.
Standardvärdet är {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
Effekten klämmer färgvärden till mellan 0 och 1 innan effekten skickar värdena till nästa effekt i diagrammet.
Om du ställer in detta på TRUE klämmer effekten fast värdena. Om du ställer in detta på FALSE kommer effekten inte att klämma in färgvärdena, men andra effekter och utdataytan kan klämma fast värdena om de inte har tillräckligt hög precision.
Typen är BOOL.
Standardvärdet är FALSE.

Utdatabitmapp

Utdatabitmappen beror på koefficientvärdena. Det här är de möjliga bitmappsstorlekarna för utdata.

  • Om C1 är den enda koefficienten som inte är noll är utdatastorleken skärningspunkten för indatarektanglarna.
  • Om C2 är den enda icke-nollkoefficienten är utdatastorleken storleken på källrektangeln.
  • Om C3 är den enda koefficienten som inte är noll är utdatastorleken storleken på rektangeln Mål.
  • Om alla koefficienter är noll är utdatastorleken en tom rektangel.
  • För alla andra koefficientvärden är utdatastorleken en union av indatarektanglarna.

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