Udostępnij za pośrednictwem


Efekt mieszania

Użyj efektu mieszania, aby połączyć 2 obrazy. Ten efekt ma 26 trybów mieszania.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1Blend.

Przykłady mieszania

Oto przykładowy obraz każdego trybu mieszania efektu mieszania. Pełna lista trybów mieszania i odpowiednich właściwości trybu znajduje się w następnej sekcji

przykładowy zrzut ekranu przedstawiający wszystkie dostępne tryby mieszania.

Oto kolejny przykład użycia trybu wykluczania.

Przed obrazem 1
pierwszego obrazu źródłowego przed efektem.
Przed obrazem 2
drugi obraz przed efektem.
Po
obraz po przekształceniu.
ComPtr<ID2D1Effect> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);

blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);

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

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
Tryb
D2D1_BLEND_PROP_MODE
Tryb mieszany używany do efektu. Aby uzyskać więcej informacji, zobacz tryby Blend. Typ jest D2D1_BLEND_MODE.
Wartość domyślna to D2D1_BLEND_MODE_MULTIPLY.

Tryby mieszania

W poniższej tabeli przedstawiono wszystkie tryby mieszania tego efektu. Funkcje pomocnicze niezbędne do obliczenia danych wyjściowych efektu znajdują się w następnej sekcji.

Kolor:PRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)

Alfa: OA = FA * (1 – BA) + BA

Gdzie:

  • PRGB jest wstępnie pomnożonym kolorem danych wyjściowych
  • OA to dane wyjściowe Alfa
  • RGB B jest kolorem docelowym bez wstępnie pomnożonego
  • BA to docelowa alfa
  • FRGB jest niemnożonym wstępnie kolorem źródłowym
  • FA jest źródłem alfa
  • f(SRGB, DRGB) to funkcja blend, która różni się w trybie mieszanym

Niektóre tryby mieszania wymagają konwersji na i z odcienia, nasycenia, świetlistości (HSL) przestrzeni kolorów na RGB.

Wyliczenie Równanie
D2D1_BLEND_MODE_DARKEN Podstawowa formuła mieszania tylko dla alfa. formułę matematyczną dla efektu ciemniejszego.
D2D1_BLEND_MODE_MULTIPLY Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mnożenia.
D2D1_BLEND_MODE_COLOR_BURN Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu spalania stożka.
D2D1_BLEND_MODE_LINEAR_BURN Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu spalania liniowego.
D2D1_BLEND_MODE_DARKER_COLOR Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu koloru ciemniejszego.
D2D1_BLEND_MODE_LIGHTEN Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu rozjaśnianego.
D2D1_BLEND_MODE_SCREEN Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu ekranu.
D2D1_BLEND_MODE_COLOR_DODGE Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu dodge koloru.
D2D1_BLEND_MODE_LINEAR_DODGE Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu dodge liniowego.
D2D1_BLEND_MODE_LIGHTER_COLOR Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla jaśniejszego efektu koloru.
D2D1_BLEND_MODE_OVERLAY Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu nakładki.
D2D1_BLEND_MODE_SOFT_LIGHT Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu miękkiego światła.
D2D1_BLEND_MODE_HARD_LIGHT Podstawowe formuły mieszają się z formułami f(FRGB, BRGB) = Formuła matematyczna dla efektu twardego światła.
D2D1_BLEND_MODE_VIVID_LIGHT Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla żywego efektu światła.
D2D1_BLEND_MODE_LINEAR_LIGHT Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu światła liniowego.
D2D1_BLEND_MODE_PIN_LIGHT Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu światła pinezki.
D2D1_BLEND_MODE_HARD_MIX Podstawowe formuły mieszane z f(FRGB, BRGB) = Formuła matematyczna dla efektu mieszania twardego.
D2D1_BLEND_MODE_DIFFERENCE Podstawowe formuły mieszane z f(FRGB, BRGB) = abs(FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION Podstawowe formuły mieszane z f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB
D2D1_BLEND_MODE_HUE Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mieszanki odcieni.
D2D1_BLEND_MODE_SATURATION Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mieszanego nasycenia.
D2D1_BLEND_MODE_COLOR Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mieszanki kolorów.
D2D1_BLEND_MODE_LUMINOSITY Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mieszanego jaskrawości.
D2D1_BLEND_MODE_DISSOLVE Dany:
  • Współrzędna sceny XY dla bieżącego piksela
  • Deterministyczny pseudolosowy generator liczb rand(XY) oparty na współrzędnych nasion XY, z bezstronnym rozkładem wartości z [0, 1]

Formuła matematyczna dla efektu rozpuszczonego mieszanki.
D2D1_BLEND_MODE_SUBTRACT Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla odejmowego efektu mieszanego.
D2D1_BLEND_MODE_DIVISION Podstawowa formuła mieszania tylko dla alfa. Formuła matematyczna dla efektu mieszanego dzielenia.

Nuta

W przypadku wszystkich trybów blend wartość wyjściowa jest wstępnie wywłaszczone i zaciśnięta do zakresu [0, 1].

Konwersje przestrzeni kolorów HSL

Składnik jaskrawości jest obliczany przy użyciu wag RGB tutaj:

  • kR = 0,30
  • kG = 0,59
  • kB = 0,11

Konwertowanie z RGB na HSL

formułę matematyczną opisującą przekształcenie z koloru rgb na kolor hsl.

W tym miejscu S i L w zakresie [0.0, 1.0] i H w zakresie [-1.0, 5.0].

Konwertowanie z HSL na RGB

Aby przekonwertować inny sposób, użyjemy odwrotności poprzednich obliczeń.

Jeśli S = 0, R = G = B = L

W przeciwnym razie istnieją sześć przypadków zależności:

Jeśli H jest większa niż 0, wartości znajdują się w sektorze czerwonym/magenta, w którym R>B>G.

matematyczny krok jeden z sześciu konwersji koloru hsl na rgb.

Jeśli H jest większa lub równa 0 i mniejsza niż 1, wartości znajdują się w sektorze czerwonym/żółtym, w którym R>G>B.

matematyczny krok drugi z sześciu konwersji koloru hsl na rgb.

Jeśli H jest większa lub równa 1 i mniejsza niż 2, wartości znajdują się w sektorze żółtym/zielonym, w którym G>R>B.

matematyczny krok trzeci z sześciu konwersji koloru hsl na rgb.

Jeśli H jest większa lub równa 2 i mniejsza niż 3, wartości znajdują się w sektorze zielonym/cyan, w którym G>B>R.

matematyczny krok czwarty z sześciu konwersji koloru hsl na rgb.

Jeśli H jest większa lub równa 3 i mniejsza niż 4, wartości znajdują się w sektorze cyjan/niebieskim, w którym B>G>R.

matematyczny krok 5 z sześciu konwersji koloru hsl na rgb.

Jeśli H jest większa lub równa 4, wartości znajdują się w sektorze niebieskim/magenta, w którym B>R>G.

matematyczny krok sześć z sześciu konwersji koloru hsl na rgb.

Ponieważ tryby łączenia tworzą dowolne kombinacje składników HSL z dwóch różnych kolorów, często wartość przekonwertowanego rgb ma być poza zakresem prawnym [0.0, 1.0]. Te kolory są przywracane do gamy przez minimalne zmniejszenie nasycenia, zachowując zarówno odcienie, jak i jasność:

formułę matematyczną opisującą poprawki wymagane dla wystąpień poza gamą.

Mapa bitowa wyjściowa

Mapa bitowa danych wyjściowych dla tego efektu jest zawsze rozmiarem unii dwóch obrazów wejściowych.

Przykładowy kod

Aby uzyskać przykład tego efektu, pobierz przykładowe tryby efektu złożonego Direct2D.

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