Condividi tramite


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

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

screenshot dell'esempio di effetto di tutte le modalità blend disponibili.

Ecco un altro esempio che usa la modalità di esclusione.

Prima dell'immagine 1
la prima immagine di origine prima dell'effetto.
Prima dell'immagine 2
la seconda immagine prima dell'effetto.
Dopo
immagine dopo la trasformazione.
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. formula matematica per un effetto scuro.
D2D1_BLEND_MODE_MULTIPLY Formula di fusione di base solo per alfa. Formula matematica per un effetto di moltiplicazione.
D2D1_BLEND_MODE_COLOR_BURN Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di bruciatura coor.
D2D1_BLEND_MODE_LINEAR_BURN Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di burn lineare.
D2D1_BLEND_MODE_DARKER_COLOR Formula di fusione di base solo per alfa. Formula matematica per un effetto di colore scuro.
D2D1_BLEND_MODE_LIGHTEN Formula di fusione di base solo per alfa. Formula matematica per un effetto di luce.
D2D1_BLEND_MODE_SCR edizione Enterprise N Formula di fusione di base solo per alfa. Formula matematica per un effetto schermo.
D2D1_BLEND_MODE_COLOR_DODGE Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di schivatura del colore.
D2D1_BLEND_MODE_LINEAR_DODGE Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto schivare lineare.
D2D1_BLEND_MODE_LIGHTER_COLOR Formula di fusione di base solo per alfa. Formula matematica per un effetto di colore più chiaro.
D2D1_BLEND_MODE_OVERLAY Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di sovrapposizione.
D2D1_BLEND_MODE_SOFT_LIGHT Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di luce morbida.
D2D1_BLEND_MODE_HARD_LIGHT Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto chiaro duro.
D2D1_BLEND_MODE_VIVID_LIGHT Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto chiaro vivido.
D2D1_BLEND_MODE_LINEAR_LIGHT Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di luce lineare.
D2D1_BLEND_MODE_PIN_LIGHT Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto luce pin.
D2D1_BLEND_MODE_HARD_MIX Formule di fusione di base con f(FRGB, BRGB) = Formula matematica per un effetto di combinazione rigida.
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. Formula matematica per un effetto di fusione di tonalità.
D2D1_BLEND_MODE_SATURATION Formula di fusione di base solo per alfa. Formula matematica per un effetto di fusione di saturazione.
D2D1_BLEND_MODE_COLOR Formula di fusione di base solo per alfa. Formula matematica per un effetto di fusione di colori.
D2D1_BLEND_MODE_LUMINOSITY Formula di fusione di base solo per alfa. Formula matematica per un effetto di fusione di luminosità.
D2D1_BLEND_MODE_DISSOLVE Si consideri quanto segue:
  • Coordinata della scena XY per il pixel corrente
  • Un generatore di numeri pseudo-casuali deterministico rand(XY) basato sulla coordinata di inizializzazione XY, con distribuzione non distorta dei valori da [0, 1]

Formula matematica per un effetto di fusione dissolvenza.
D2D1_BLEND_MODE_SUBTRACT Formula di fusione di base solo per alfa. Formula matematica per un effetto di fusione sottrazione.
D2D1_BLEND_MODE_DIVISION Formula di fusione di base solo per alfa. Formula matematica per un effetto di fusione di divisione.

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

formula matematica che descrive la trasformazione dal colore rgb al colore 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.

passaggio matematico equaiton uno di sei convertendo il colore hsl in rgb.

Se H è maggiore o uguale a 0 e minore di 1, i valori si trovano nel settore rosso/giallo dove R G>>B.

matematica equaiton passaggio 2 di sei conversione del colore hsl in rgb.

Se H è maggiore o uguale a 1 e minore di 2, i valori si trovano nel settore giallo/verde dove G>R>B.

matematica equaiton passaggio 3 di sei conversione del colore hsl in rgb.

Se H è maggiore o uguale a 2 e minore di 3, i valori si trovano nel settore verde/ciano in cui G>B>R.

matematica equaiton passaggio 4 di sei conversione del colore hsl in rgb.

Se H è maggiore o uguale a 3 e minore di 4, i valori si trovano nel settore ciano/blu dove B>G>R.

matematica equaiton passaggio 5 di sei conversione del colore hsl in rgb.

Se H è maggiore o uguale a 4, i valori si trovano nel settore blu/magenta in cui B>R>G.

passaggio matematico equaiton sei di sei convertendo il colore hsl in rgb.

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à:

formula matematica che descrive le correzioni necessarie per le istanze di gamut.

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

ID2D1Effect