Sdílet prostřednictvím


Aritmetický složený efekt

Pomocí aritmetického složeného efektu můžete zkombinovat 2 obrázky pomocí váženého součtu pixelů ze vstupních obrázků.

CLSID pro tento efekt je CLSID_D2D1ArithmeticComposite.

Vzorec

Vzorec zde slouží k výpočtu tohoto efektu.

Výstupnírgba = C1 * Zdrojovárgba * Cílovárgba + C2 * Zdrojrgba + C3 * Cílovárgba + C4

Kde C1, C2, C3, C4 jsou koeficienty, které nastavíte.

Koeficienty se mapují na hodnoty v D2D1_VECTOR_4F (x, y, z, w):

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

Příklad obrázku

Jednoduchým příkladem je přidání zdrojových a cílových pixelů. V příkladu jsou 2 zaoblené obdélníky složené dohromady. Zdrojový obdélník je modrý a cíl je červený.

Obrázek zde je výstup aritmetického složeného efektu s koeficienty rovnice nastavenými na hodnoty zde.

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

příkladu obrázku zobrazující 2 zaoblené obdélníky stejné velikosti, které se překrývají pomocí aritmetického složeného efektu.

Výsledkem je přidání hodnot pixelů pro zdroj a cíl. Oblasti, ve kterých se obdélníky nepřekrývají, jsou všechny hodnoty RGBA 0. Pokud se obdélníky překrývají, barva je purpurová, protože hodnoty R a B jsou maximální.

Tady je další příklad obrázku s kódem.

Před obrázkem 1
první zdrojový obrázek před efektem.
Před obrázkem 2
druhý obrázek před efektem.
Po
obrázek po transformaci.
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();

Vlastnosti efektu

Zobrazovaný název a výčet indexu Popis
Koeficienty
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Koeficienty rovnice použité ke složení dvou vstupních obrázků. Koeficienty jsou bez jednotkové a nevázané. Typ je D2D1_VECTOR_4F.
Výchozí hodnota je {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
Efekt upne hodnoty barev mezi 0 a 1, než efekt předá hodnoty dalšímu efektu v grafu.
Pokud nastavíte hodnotu TRUE, efekt uchytne hodnoty. Pokud nastavíte hodnotu NEPRAVDA, efekt neuchytne hodnoty barev, ale jiné efekty a výstupní povrch mohou upnout hodnoty, pokud nejsou dostatečně vysoké přesnosti.
Typ je BOOL.
Výchozí hodnota je FALSE.

Výstupní rastrový obrázek

Výstupní rastrový obrázek závisí na hodnotách koeficientu. Toto jsou možné velikosti výstupních rastrových obrázků.

  • Pokud je C1 jediným nenulovým koeficientem, je výstupní velikost průsečíkem vstupních obdélníků.
  • Pokud je C2 jediným nenulovým koeficientem, je velikost výstupu velikost obdélníku Zdroj.
  • Pokud je C3 jediný nenulový koeficient, velikost výstupu je velikost cílového obdélníku..
  • Pokud jsou všechny koeficienty nulové, je velikost výstupu prázdný obdélník.
  • Pro všechny ostatní hodnoty koeficientu je výstupní velikost sjednocení vstupních obdélníků.

Požadavky

Požadavek Hodnota
Minimální podporovaný klient Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store]
Minimální podporovaný server Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store]
Záhlaví d2d1effects.h
Knihovna d2d1.lib, dxguid.lib

ID2D1Effect