Blandningseffekt
Använd blandningseffekten för att kombinera 2 bilder. Den här effekten har 26 blandningslägen.
CLSID för den här effekten är CLSID_D2D1Blend.
- Blandningsexempel
- egenskaper för effekt
- Blandningslägen
- HSL-färgrymdskonverteringar
- bitmapp för utdata
- Exempelkod
- Krav
- Relaterade ämnen
Blandningsexempel
Här är en exempelbild av varje blandningsläge i blandningseffekten. En fullständig lista över blandningslägena och motsvarande lägesegenskaper finns i nästa avsnitt
Här är ett annat exempel med undantagsläget.
Före bild 1 |
---|
![]() |
Före bild 2 |
![]() |
Efter |
![]() |
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();
Effektegenskaper
Visningsnamn och indexuppräkning | Beskrivning |
---|---|
Läge D2D1_BLEND_PROP_MODE |
Blandningsläget som används för effekten. Mer information finns i Blandningslägen. Typen är D2D1_BLEND_MODE. Standardvärdet är D2D1_BLEND_MODE_MULTIPLY. |
Blandningslägen
Tabellen här visar alla blandningslägen för den här effekten. De hjälpfunktioner som krävs för att beräkna effektens utdata finns i nästa avsnitt.
Färg: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Alfa: OA = FA * (1 - BA) + BA
Var:
- OPRGB- är den förplikerade utdatafärgen
- OEn är utdata alfa
- BRGB- är den ofördubblade målfärgen
- BEn är mål alfa
- FRGB- är den ofördubblade källfärgen
- FEn är käll-alfa
- f(SRGB, DRGB) är en blandningsfunktion som varierar per blandningsläge
Vissa av blandningslägena kräver konvertering till och från färgrymden nyans, mättnad, ljusstyrka (HSL) till RGB.
Uppräkning | Ekvation |
---|---|
D2D1_BLEND_MODE_DARKEN | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_MULTIPLY | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_COLOR_BURN | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_LIGHTEN | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_SCREEN | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_OVERLAY | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | Grundläggande blandningsformler med f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DIFFERENCE | Grundläggande blandningsformler med f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Grundläggande blandningsformler med f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_SATURATION | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_COLOR | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_LUMINOSITY | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_DISSOLVE | Given:
![]() |
D2D1_BLEND_MODE_SUBTRACT | Grundläggande blandningsformel endast för alfa.
![]() |
D2D1_BLEND_MODE_DIVISION | Grundläggande blandningsformel endast för alfa.
![]() |
Not
För alla blandningslägen är utdatavärdet premultiplied och fastklämt till intervallet [0, 1].
HSL-färgrymdskonverteringar
Luminositetskomponenten beräknas med RGB-vikterna här:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Konvertera från RGB till HSL
Detta placerar S och L i intervallet [0,0, 1,0] och H i intervallet [-1.0, 5.0].
Konvertera från HSL till RGB
Om du vill konvertera det andra sättet använder vi invertering av tidigare beräkningar.
Om S = 0 R = G = B = L
Annars finns det sex nyansberoende fall:
Om H är större än 0 finns värdena i sektorn röd/magenta där R>B>G.
Om H- är större än eller lika med 0 och mindre än 1 finns värdena i den röda/gula sektorn där R>G>B.
Om H- är större än eller lika med 1 och mindre än 2 finns värdena i den gula/gröna sektorn där G>R>B.
Om H- är större än eller lika med 2 och mindre än 3 finns värdena i den gröna/cyanska sektorn där G>B>R.
Om H- är större än eller lika med 3 och mindre än 4 finns värdena i cyan/blå sektorn där B>G>R.
Om H är större än eller lika med 4 finns värdena i sektorn blue/magenta där B>R>G.
Eftersom blandningslägena gör godtyckliga kombinationer av HSL-komponenter från två olika färger är det vanligt att det konverterade RGB-värdet är out-of-gamut, dvs. en eller flera kanalkomponenter kan ligga utanför det juridiska intervallet [0.0, 1.0]. Dessa färger förs tillbaka i omfång genom att minimalt minska mättnad, samtidigt som både nyans och ljusstyrka bevaras:
Utdatabitmapp
Utdatabitmappen för den här effekten är alltid storleken på unionen för de två indatabilderna.
Exempelkod
Om du vill ha ett exempel på den här effekten laddar du ned exempel på Direct2D-sammansatta effektlägen.
Krav
Krav | Värde |
---|---|
Lägsta klient som stöds | Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar] |
Lägsta server som stöds | Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar] |
Rubrik | d2d1effects.h |
Bibliotek | d2d1.lib, dxguid.lib |