Effetto blend
Usare l'effetto blend per combinare 2 immagini. Questo effetto ha 26 modalità di fusione.
Il CLSID per questo effetto è CLSID_D2D1Blend.
- Esempi di fusione
- Proprietà dell'effetto
- Fusione
- Conversioni dello spazio dei colori HSL
- Bitmap di output
- Codice di esempio
- Requisiti
- Argomenti correlati
Esempi di fusione
Ecco un'immagine di esempio di ogni modalità di fusione dell'effetto blend. Un elenco completo delle modalità blend e delle proprietà della modalità corrispondenti si trovano nella sezione successiva
Ecco un altro esempio che usa la modalità di esclusione.
Prima dell'immagine 1 |
---|
Prima dell'immagine 2 |
Dopo |
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();
Proprietà dell'effetto
Enumerazione del nome visualizzato e dell'indice | Descrizione |
---|---|
Mode D2D1_BLEND_PROP_MODE |
Modalità di fusione utilizzata per l'effetto. Per altre informazioni, vedi Modalità Blend. Il tipo è D2D1_BLEND_MODE. Il valore predefinito è D2D1_BLEND_MODE_MULTIPLY. |
Fusione
La tabella seguente mostra tutte le modalità di fusione di questo effetto. Le funzioni helper necessarie per calcolare l'output dell'effetto si trovano nella sezione successiva.
Colore: OPRGB = f(FRGB, BRGB) * FA * B A + FRGB * FA * (1 - B A) + BRGB * BA * (1 - FA)
Alfa: OA = FA * (1 - BA) + BA
Dove:
- OPRGB è il colore di output pre-moltiplicato
- OA è Output Alpha
- BRGB è il colore di destinazione non moltiplicato
- BA è alfa di destinazione
- FRGB è il colore di origine non moltiplicato
- FA è l'origine alfa
- f(SRGB, DRGB) è una funzione di fusione che varia per modalità blend
Alcune delle modalità di fusione richiedono la conversione da e verso tonalità, saturazione, luminosità (HSL) a RGB.
Enumerazione | Equazione |
---|---|
D2D1_BLEND_MODE_DARKEN | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_MULTIPLY | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_COLOR_BURN | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_BURN | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DARKER_COLOR | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_LIGHTEN | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_SCR edizione Enterprise N | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_COLOR_DODGE | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_DODGE | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LIGHTER_COLOR | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_OVERLAY | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_SOFT_LIGHT | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_LIGHT | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_VIVID_LIGHT | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_LIGHT | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_PIN_LIGHT | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_MIX | Formule di fusione di base con f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DIFFERENCE | Formule di fusione di base con f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Formule di fusione di base con f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_SATURATION | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_COLOR | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_LUMINOSITY | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_DISSOLVE | Si consideri quanto segue:
|
D2D1_BLEND_MODE_SUBTRACT | Formula di fusione di base solo per alfa. |
D2D1_BLEND_MODE_DIVISION | Formula di fusione di base solo per alfa. |
Nota
Per tutte le modalità Blend, il valore di output è premoltiplicato e bloccato all'intervallo [0, 1].
Conversioni dello spazio dei colori HSL
Il componente di luminosità viene calcolato usando i pesi RGB qui:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Conversione da RGB a HSL
Posiziona S e L nell'intervallo [0,0, 1,0] e H nell'intervallo [-1.0, 5,0].
Conversione da HSL a RGB
Per convertire l'altro modo in cui si usa l'inverso dei calcoli precedenti.
Se S = 0 allora R = G L = =
In caso contrario, esistono sei casi dipendenti dalle tonalità:
Se H è maggiore di 0, i valori si trovano nel settore rosso/magenta in cui R>B>G.
Se H è maggiore o uguale a 0 e minore di 1, i valori si trovano nel settore rosso/giallo dove R G>>B.
Se H è maggiore o uguale a 1 e minore di 2, i valori si trovano nel settore giallo/verde dove G>R>B.
Se H è maggiore o uguale a 2 e minore di 3, i valori si trovano nel settore verde/ciano in cui G>B>R.
Se H è maggiore o uguale a 3 e minore di 4, i valori si trovano nel settore ciano/blu dove B>G>R.
Se H è maggiore o uguale a 4, i valori si trovano nel settore blu/magenta in cui B>R>G.
Poiché le modalità di fusione fanno combinazioni arbitrarie di componenti HSL da due colori diversi, è comune che il valore RGB convertito sia fuori gamma, ovvero uno o più componenti del canale potrebbero non essere compresi nell'intervallo legale [0,0, 1,0]. Questi colori vengono reintroduzione nella gamma riducendo al minimo la saturazione, mantenendo al contempo sia la tonalità che la luminosità:
Bitmap di output
La bitmap di output per questo effetto è sempre la dimensione dell'unione delle due immagini di input.
Codice di esempio
Per un esempio di questo effetto, scaricare l'esempio di modalità di effetto composito Direct2D.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store] |
Server minimo supportato | Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store] |
Intestazione | d2d1effects.h |
Libreria | d2d1.lib, dxguid.lib |