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 Blending
- właściwości Efekt
- tryby Blend
- konwersje przestrzeni kolorów HSL
- danych bitowych wyjściowych
- przykładowy kod
- wymagania dotyczące
- Tematy pokrewne
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
Oto kolejny przykład użycia trybu wykluczania.
Przed obrazem 1 |
---|
![]() |
Przed obrazem 2 |
![]() |
Po |
![]() |
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.
![]() |
D2D1_BLEND_MODE_MULTIPLY | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_COLOR_BURN | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_LIGHTEN | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_SCREEN | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_OVERLAY | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | Podstawowe formuły mieszają się z formułami f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | Podstawowe formuły mieszane z f(FRGB, BRGB) = ![]() |
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.
![]() |
D2D1_BLEND_MODE_SATURATION | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_COLOR | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_LUMINOSITY | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_DISSOLVE | Dany:
![]() |
D2D1_BLEND_MODE_SUBTRACT | Podstawowa formuła mieszania tylko dla alfa.
![]() |
D2D1_BLEND_MODE_DIVISION | Podstawowa formuła mieszania tylko dla alfa.
![]() |
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
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.
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.
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.
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.
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.
Jeśli H jest większa lub równa 4, wartości znajdują się w sektorze niebieskim/magenta, w którym B>R>G.
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ść:
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 |