Efekt prolnutí
Pomocí efektu prolnutí můžete zkombinovat 2 obrázky. Tento efekt má 26 režimů prolnutí.
CLSID pro tento efekt je CLSID_D2D1Blend.
- příklady blendingu
- vlastnosti efektu
- režimy Blendu
-
převody barevného prostoru HSL
- Převod z RGB na HSL
- Převod z HSL na RGB
- výstupní rastrový obrázek
- vzorový kód
- požadavky na
- související témata
Příklady prolnutí
Tady je příklad obrázku každého režimu prolnutí efektu blendu. Úplný seznam režimů blendu a odpovídajících vlastností režimu najdete v další části.
Tady je další příklad použití režimu vyloučení.
Před obrázkem 1 |
---|
![]() |
Před obrázkem 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();
Vlastnosti efektu
Zobrazovaný název a výčet indexu | Popis |
---|---|
Režim D2D1_BLEND_PROP_MODE |
Režim prolnutí použitý pro efekt. Další informace najdete v režimech Blendu. Typ je D2D1_BLEND_MODE. Výchozí hodnota je D2D1_BLEND_MODE_MULTIPLY. |
Režimy blendu
V této tabulce jsou uvedeny všechny režimy kombinace tohoto efektu. Pomocné funkce potřebné k výpočtu výstupu efektu jsou v další části.
Barva: O = PRGB f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 – BA) + BRGB * BA * (1 – FA)
Alfa: OA = FA * (1 – BA) + BA
Kde:
- OPRGB je předem vynásobená výstupní barva.
- OA je výstupní alfa
- BRGB je předem vynásobená cílová barva.
- BA je cílová alfa
- FRGB je nenásobená zdrojová barva
- FA je zdroj alfa
- f(SRGB, DRGB) je funkce mixu, která se liší podle režimu mixu.
Některé režimy směsi vyžadují převod na barevný prostor RGB a z odstínu, sytosti, světelnosti (HSL).
Výčet | Rovnice |
---|---|
D2D1_BLEND_MODE_DARKEN | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_MULTIPLY | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_COLOR_BURN | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_LIGHTEN | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_SCREEN | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_OVERLAY | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | Základní kombinace vzorců s f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DIFFERENCE | Základní kombinace vzorců s f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Základní kombinace vzorců s f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_SATURATION | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_COLOR | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_LUMINOSITY | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_DISSOLVE | Daný:
![]() |
D2D1_BLEND_MODE_SUBTRACT | Základní vzorec směsi pouze pro alfa.
![]() |
D2D1_BLEND_MODE_DIVISION | Základní vzorec směsi pouze pro alfa.
![]() |
Poznámka
Pro všechny režimy Blendu je výstupní hodnota předem nastavená a uchycená do rozsahu [0, 1].
Převody barevného prostoru HSL
Komponenta luminosity se vypočítá pomocí závaží RGB zde:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Převod z RGB na HSL
To S a L v rozsahu [0,0, 1,0] a H v rozsahu [-1,0, 5,0].
Převod z HSL na RGB
K převodu jiného způsobu používáme inverzní funkci k předchozím výpočtům.
Pokud S = 0, pak R = G = B = L
Jinak existuje šest případů závislých na odstínech:
Pokud je H větší než 0, hodnoty jsou v červeném/purpurovém sektoru, kde R>B>G.
Pokud je H větší nebo roven 0 a menší než 1, hodnoty jsou v červeném/žlutém sektoru, kde R>G>B.
Pokud je H větší nebo rovna 1 a menší než 2, hodnoty jsou ve žlutém/zeleném sektoru, kde G>R>B.
Pokud je H větší nebo roven 2 a menší než 3, hodnoty jsou v zeleném/azurovém sektoru, kde G>B>R.
Pokud je H větší nebo roven 3 a menší než 4, hodnoty jsou v azurovém/modrém sektoru, kde B>G>R.
Pokud je H větší nebo rovna 4, hodnoty jsou v modrém/purpurovém sektoru, kde B>R>G.
Vzhledem k tomu, že režimy prolnutí umožňují libovolnou kombinaci součástí HSL ze dvou různých barev, je běžné, že převedená hodnota RGB je mimo gamut, to znamená, že jedna nebo více součástí kanálu může být mimo právní rozsah [0,0, 1,0]. Tyto barvy se přenesou zpět do gamutu tím, že se sníží sytost a současně zachovávají odstín i světelnost:
Výstupní rastrový obrázek
Výstupní rastrový obrázek pro tento efekt je vždy velikost sjednocení dvou vstupních obrázků.
Ukázkový kód
Příklad tohoto efektu si stáhněte režimy složeného efektu Direct2D ukázky.
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 |