Udostępnij za pośrednictwem


Efekt złożony arytmetyczny

Użyj efektu arytmetycznego złożonego, aby połączyć 2 obrazy przy użyciu ważonej sumy pikseli z obrazów wejściowych.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1ArithmeticComposite.

Formuła

Formuła w tym miejscu służy do obliczenia tego efektu.

Outputrgba = C1 * Sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Gdzie C1, C2, C3, C4 to ustawione współczynniki.

Współczynniki są mapować na wartości w D2D1_VECTOR_4F (x, y, z, w):

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

Przykładowy obraz

Prostym przykładem jest dodanie pikseli źródłowych i docelowych. W tym przykładzie złożone są 2 zaokrąglone prostokąty. Prostokąt źródłowy jest niebieski, a miejsce docelowe jest czerwone.

Na poniższym obrazie przedstawiono dane wyjściowe efektu arytmetycznego złożonego z współczynnikami równania ustawionymi na wartości w tym miejscu.

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

przykładowy obraz przedstawiający 2 zaokrąglone prostokąty o tym samym rozmiarze, które nakładają się przy użyciu efektu arytmetycznego złożonego.

Wynikiem jest dodanie wartości pikseli dla źródła i miejsca docelowego. Wszystkie regiony, w których prostokąty nie nakładają się na wartości RGBA, to 0. Gdzie prostokąty nakładają się na kolor magenta, ponieważ wartości R i B są równe maksymalne.

Oto kolejny przykładowy obraz z kodem.

Przed obrazem 1
pierwszego obrazu źródłowego przed efektem.
Przed obrazem 2
drugi obraz przed efektem.
Po
obraz po przekształceniu.
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();

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
Współczynniki
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Współczynniki równania używane do tworzenia złożonych dwóch obrazów wejściowych. Współczynniki są bezjednostki i niezwiązane. Typ to D2D1_VECTOR_4F.
Wartość domyślna to {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
Efekt zaciska wartości kolorów z zakresu od 0 do 1 przed przekazaniem wartości do następnego efektu na wykresie.
Jeśli ustawisz wartość TRUE, efekt będzie zaciskać wartości. Jeśli ustawisz wartość FALSE, efekt nie zacisnie wartości kolorów, ale inne efekty, a powierzchnia wyjściowa może zacisać wartości, jeśli nie są wystarczająco precyzyjne.
Typ to BOOL.
Wartość domyślna to FALSE.

Mapa bitowa wyjściowa

Mapa bitowa wyjściowa zależy od wartości współczynników. Są to możliwe rozmiary map bitowych wyjściowych.

  • Jeśli C1 jest jedynym współczynnikem niezerowym, rozmiar danych wyjściowych jest przecięciem prostokątów wejściowych.
  • Jeśli C2 jest jedynym współczynnikem niezerowym, rozmiar danych wyjściowych jest rozmiarem prostokąta źródłowego.
  • Jeśli C3 jest jedynym współczynnikem niezerowym, rozmiar danych wyjściowych jest rozmiarem prostokąta Docelowego.
  • Jeśli wszystkie współczynniki są zerowe, rozmiar danych wyjściowych jest pustym prostokątem.
  • Dla wszystkich pozostałych wartości współczynników rozmiar danych wyjściowych jest unią prostokątów wejściowych.

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Minimalny obsługiwany serwer Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Nagłówek d2d1effects.h
Biblioteka d2d1.lib, dxguid.lib

ID2D1Effect