Keverési effektus
A keverési effektus használatával 2 képet egyesíthet. Ez az effektus 26 keverési móddal rendelkezik.
Az effektus CLSID azonosítója CLSID_D2D1Blend.
- Keverési példák
- Effektus tulajdonságai
- keverési módok
- HSL-színtér konvertálása
- Kimeneti bitkép
- mintakód
- követelmények
- Kapcsolódó témakörök
Példák keverése
Íme egy példa a keverési effektus összes keverési módjára. A keverési módok és a megfelelő módtulajdonságok teljes listája a következő szakaszban található
Íme egy másik példa a kizárási mód használatával.
1. kép előtt |
---|
![]() |
2. kép előtt |
![]() |
Után |
![]() |
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();
Effektus tulajdonságai
Név és index számbavételének megjelenítése | Leírás |
---|---|
Üzemmód D2D1_BLEND_PROP_MODE |
Az effektushoz használt keverési mód. További információért lásd keverési módokat. A típus D2D1_BLEND_MODE. Az alapértelmezett érték D2D1_BLEND_MODE_MULTIPLY. |
Keverési módok
Az alábbi táblázat ennek az effektusnak az összes keverési módjait mutatja be. Az effektus kimenetének kiszámításához szükséges segédfüggvények a következő szakaszban találhatók.
Szín: OPRGB = f(FRGB, BRGB) * FA * BA + FR GB * FA * (1 – BA) + BRGB * BA * (1 – FA)
Alfa: OA = FA * (1 – BA) + BA
Hol:
- OPRGB az előre szorzott kimeneti szín
- OA az Alfa kimenet
- BRGB az előre nem szorzott célszín
- BA a cél alfa
- FRGB a nem előre szorzott forrásszín
- FA forrás alfa
- f(SRGB, DRGB) egy keverési függvény, amely keverési módonként eltérő
Egyes keverési módokhoz az árnyalat, a telítettség, a fényesség (HSL) színterének RGB-re való konvertálása szükséges.
Felsorolás | Egyenlet |
---|---|
D2D1_BLEND_MODE_DARKEN | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_MULTIPLY | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_COLOR_BURN | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_LIGHTEN | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_SCREEN | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_OVERLAY | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | Alapszintű keverékképletek f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DIFFERENCE | Alapszintű keverékképletek f(FRGB, BRGB) = abs(FRGB – BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Alapszintű keverékképletek f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_SATURATION | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_COLOR | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_LUMINOSITY | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_DISSOLVE | Adott:
![]() |
D2D1_BLEND_MODE_SUBTRACT | Alapszintű keverékképlet csak alfa esetén.
![]() |
D2D1_BLEND_MODE_DIVISION | Alapszintű keverékképlet csak alfa esetén.
![]() |
Jegyzet
Az összes keverési mód esetében a kimeneti érték előre ki van jelölve, és a tartományhoz van rögzítve [0, 1].
HSL színtérátalakítások
A fényességi összetevőt az alábbi RGB-súlyokkal számítjuk ki:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Konvertálás RGB-ről HSL-re
Ez S és L a tartományba helyezi [0.0, 1.0] és H a tartományban [-1.0, 5.0].
Konvertálás HSL-ről RGB-re
A másik átalakításhoz az előző számítások inverzét használjuk.
Ha S = 0, akkor R = G = B = L
Ellenkező esetben hat árnyalatfüggő eset van:
Ha H 0-nál nagyobb, az értékek a vörös/magenta szektorban vannak, ahol R>B>G.
Ha H 0-nál nagyobb vagy egyenlő 1-nél, az értékek a piros/sárga szektorban vannak, ahol R>G>B.
Ha H 1-nél nagyobb vagy egyenlő 2-nél, az értékek a sárga/zöld szektorban vannak, ahol G>R>B.
Ha H 2-nél nagyobb vagy egyenlő 3-nál, az értékek a zöld/cián szektorban vannak, ahol G>B>R.
Ha H 3-nál nagyobb vagy egyenlő 4-nél, akkor az értékek abban a cián/kék szektorban vannak, ahol B>G>R.
Ha H nagyobb vagy egyenlő 4-nél, az értékek a kék/magenta szektorban vannak, ahol B>R>G.
Mivel a keverési módok a HSL-összetevők tetszőleges kombinációit két különböző színből készítik, gyakran előfordul, hogy a konvertált RGB-érték el nem érhető, vagyis egy vagy több csatornaösszetevő kívül esik a [0.0, 1.0] jogi tartományon. Ezek a színek a telítettség minimális csökkentésével visszakerülnek a színtérbe, miközben megőrzik az árnyalatot és a fényességet:
Kimeneti bitkép
Az effektus kimeneti bitképe mindig a két bemeneti lemezkép egyesítésének mérete.
Mintakód
Erre az effektusra példaként töltse le a Direct2D összetett effektusmódok mintáját.
Követelmények
Követelmény | Érték |
---|---|
Minimálisan támogatott ügyfél | Windows 8 és Platform Update for Windows 7 [asztali alkalmazások | Windows Áruházbeli alkalmazások] |
Minimálisan támogatott kiszolgáló | Windows 8 és Platform Update for Windows 7 [asztali alkalmazások | Windows Áruházbeli alkalmazások] |
Fejléc | d2d1effects.h |
Könyvtár | d2d1.lib, dxguid.lib |