Sdílet prostřednictvím


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 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.

příkladu snímku obrazovky se všemi dostupnými režimy blendu

Tady je další příklad použití režimu vyloučení.

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> 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. matematický vzorec pro tmavý efekt.
D2D1_BLEND_MODE_MULTIPLY Základní vzorec směsi pouze pro alfa. matematický vzorec pro násobení efektu.
D2D1_BLEND_MODE_COLOR_BURN Základní kombinace vzorců s f(FRGB, BRGB) = matematický vzorec pro efekt vypálení kužele.
D2D1_BLEND_MODE_LINEAR_BURN Základní kombinace vzorců s f(FRGB, BRGB) = matematický vzorec pro lineární burn efekt.
D2D1_BLEND_MODE_DARKER_COLOR Základní vzorec směsi pouze pro alfa. matematický vzorec pro tmavý barevný efekt.
D2D1_BLEND_MODE_LIGHTEN Základní vzorec směsi pouze pro alfa. matematický vzorec pro odlehčený efekt.
D2D1_BLEND_MODE_SCREEN Základní vzorec směsi pouze pro alfa. matematický vzorec pro efekt obrazovky.
D2D1_BLEND_MODE_COLOR_DODGE Základní kombinace vzorců s f(FRGB, BRGB) = matematický vzorec pro efekt barevného dodge.
D2D1_BLEND_MODE_LINEAR_DODGE Základní kombinace vzorců s f(FRGB, BRGB) = matematický vzorec pro lineární efekt dodge.
D2D1_BLEND_MODE_LIGHTER_COLOR Základní vzorec směsi pouze pro alfa. matematický vzorec pro světlejší barevný efekt.
D2D1_BLEND_MODE_OVERLAY Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro překryvný efekt.
D2D1_BLEND_MODE_SOFT_LIGHT Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro měkký světlý efekt.
D2D1_BLEND_MODE_HARD_LIGHT Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro pevný světlý efekt.
D2D1_BLEND_MODE_VIVID_LIGHT Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro živý světlý efekt.
D2D1_BLEND_MODE_LINEAR_LIGHT Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro lineární světelný efekt.
D2D1_BLEND_MODE_PIN_LIGHT Základní kombinace vzorců s f(FRGB, BRGB) = matematický vzorec pro efekt připnutí světla.
D2D1_BLEND_MODE_HARD_MIX Základní kombinace vzorců s f(FRGB, BRGB) = Matematický vzorec pro efekt tvrdé kombinace.
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. matematický vzorec pro efekt kombinace odstínů.
D2D1_BLEND_MODE_SATURATION Základní vzorec směsi pouze pro alfa. matematický vzorec pro efekt sytosti.
D2D1_BLEND_MODE_COLOR Základní vzorec směsi pouze pro alfa. matematický vzorec pro efekt prolnutí barev.
D2D1_BLEND_MODE_LUMINOSITY Základní vzorec směsi pouze pro alfa. matematický vzorec pro efekt svítivosti.
D2D1_BLEND_MODE_DISSOLVE Daný:
  • Souřadnice scény XY pro aktuální pixel
  • Deterministický pseudonáhodný generátor čísel (XY) založený na počáteční souřadnici XY s nestranným rozdělením hodnot od [0, 1]

matematický vzorec pro rozpustit efekt směsi.
D2D1_BLEND_MODE_SUBTRACT Základní vzorec směsi pouze pro alfa. matematický vzorec pro odečítání efektu mixu.
D2D1_BLEND_MODE_DIVISION Základní vzorec směsi pouze pro alfa. matematický vzorec pro efekt dělení.

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

matematický vzorec popisující transformaci z barvy rgb na barvu 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.

matematický krok 1 ze šesti převáděných barev hsl na rgb.

Pokud je H větší nebo roven 0 a menší než 1, hodnoty jsou v červeném/žlutém sektoru, kde R>G>B.

matematický krok dvě ze šesti převodů barvy hsl na rgb.

Pokud je H větší nebo rovna 1 a menší než 2, hodnoty jsou ve žlutém/zeleném sektoru, kde G>R>B.

matematický krok tři ze šesti převodů barvy hsl na rgb.

Pokud je H větší nebo roven 2 a menší než 3, hodnoty jsou v zeleném/azurovém sektoru, kde G>B>R.

matematický krok čtyři ze šesti převodů barvy hsl na rgb.

Pokud je H větší nebo roven 3 a menší než 4, hodnoty jsou v azurovém/modrém sektoru, kde B>G>R.

matematický equaiton krok pět ze šesti převodů hsl barvy na rgb.

Pokud je H větší nebo rovna 4, hodnoty jsou v modrém/purpurovém sektoru, kde B>R>G.

matematický krok 6 ze šesti převodů barvy hsl na rgb.

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:

matematický vzorec popisující opravy potřebné pro výskyty gamutu.

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

ID2D1Effect