Partager via


Effet de fusion

Utilisez l’effet de fusion pour combiner 2 images. Cet effet a 26 modes de fusion.

Le CLSID pour cet effet est CLSID_D2D1Blend.

Exemples de fusion

Voici un exemple d’image de chaque mode de fusion de l’effet de fusion. Une liste complète des modes de fusion et des propriétés de mode correspondantes se trouvent dans la section suivante

capture d’écran de l’exemple d’effet de tous les modes de fusion disponibles.

Voici un autre exemple utilisant le mode d’exclusion.

Avant l’image 1
la première image source avant l’effet.
Avant l’image 2
la deuxième image avant l’effet.
Après
l’image après la transformation.
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();

Propriétés d’effet

Nom complet et énumération d’index Description
Mode
D2D1_BLEND_PROP_MODE
Mode de fusion utilisé pour l’effet. Pour plus d’informations, consultez modes Blend. Le type est D2D1_BLEND_MODE.
La valeur par défaut est D2D1_BLEND_MODE_MULTIPLY.

Modes de fusion

Le tableau ci-dessous affiche tous les modes de fusion de cet effet. Les fonctions d’assistance nécessaires pour calculer la sortie de l’effet se trouvent dans la section suivante.

Couleur : OPRVB = f(FRVB, BRVB) * FA * BA + FRVB * FA * (1 - BA) + BRVB * BA * (1 - FA)

Alpha : OA = FA * (1 - BA) + BA

Où:

  • OPRGB est la couleur de sortie pré multipliée
  • OA est Output Alpha
  • B RVB est la couleur de destination non multipliée
  • Bun est alpha de destination
  • F RVB est la couleur source non multipliée
  • FA est alpha source
  • f(SRVB, DRVB) est une fonction de fusion qui varie en mode blend

Certains modes de fusion nécessitent une conversion vers et depuis la teinte, la saturation, l’espace de couleur HSL (Luminosity) en RVB.

Énumération Équation
D2D1_BLEND_MODE_DARKEN Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet sombre.
D2D1_BLEND_MODE_MULTIPLY Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de multiplication.
D2D1_BLEND_MODE_COLOR_BURN Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de brûlure coor.
D2D1_BLEND_MODE_LINEAR_BURN Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de brûlure linéaire.
D2D1_BLEND_MODE_DARKER_COLOR Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de couleur foncé.
D2D1_BLEND_MODE_LIGHTEN Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet d’éclaircie.
D2D1_BLEND_MODE_SCREEN Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet d’écran.
D2D1_BLEND_MODE_COLOR_DODGE Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet dodge couleur.
D2D1_BLEND_MODE_LINEAR_DODGE Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet dodge linéaire.
D2D1_BLEND_MODE_LIGHTER_COLOR Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de couleur plus clair.
D2D1_BLEND_MODE_OVERLAY Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de superposition.
D2D1_BLEND_MODE_SOFT_LIGHT Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de lumière douce.
D2D1_BLEND_MODE_HARD_LIGHT Formules de fusion de base avec f(RVB F, BRVB) = formule mathématique pour un effet de lumière dure.
D2D1_BLEND_MODE_VIVID_LIGHT Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet lumineux vif.
D2D1_BLEND_MODE_LINEAR_LIGHT Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de lumière linéaire.
D2D1_BLEND_MODE_PIN_LIGHT Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de lumière d’épingle.
D2D1_BLEND_MODE_HARD_MIX Formules de fusion de base avec f(FRVB, BRVB) = formule mathématique pour un effet de mélange dur.
D2D1_BLEND_MODE_DIFFERENCE Formules de fusion de base avec f(RVB F, BRVB) = abs(FRVB - BRVB)
D2D1_BLEND_MODE_EXCLUSION Formules de fusion de base avec f(RVB F, BRVB) = FRVB + BRVB 2 * FRVB * BRVB
D2D1_BLEND_MODE_HUE Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de mélange de teintes.
D2D1_BLEND_MODE_SATURATION Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de fusion de saturation.
D2D1_BLEND_MODE_COLOR Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de fusion de couleurs.
D2D1_BLEND_MODE_LUMINOSITY Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de fusion de luminosité.
D2D1_BLEND_MODE_DISSOLVE Donné:
  • Coordonnée de scène XY pour le pixel actuel
  • Un générateur de nombres pseudo-aléatoires déterministe rand(XY) basé sur la coordonnée de départ XY, avec une distribution non biaisée des valeurs de [0, 1]

formule mathématique pour un effet de fusion de dissolution.
D2D1_BLEND_MODE_SUBTRACT Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de fusion soustraction.
D2D1_BLEND_MODE_DIVISION Formule de fusion de base pour alpha uniquement. formule mathématique pour un effet de fusion de division.

Note

Pour tous les modes Blend, la valeur de sortie est prémultipliée et limitée à la plage [0, 1].

Conversions d’espace de couleur HSL

Le composant de luminosité est calculé à l’aide des pondérations RVB ici :

  • kR = 0,30
  • k G = 0,59
  • kB = 0,11

Conversion de RVB en HSL

formule mathématique décrivant la transformation de la couleur rvb vers la couleur hsl.

Cela place S et L dans la plage [0,0, 1,0] et H dans la plage [-1.0, 5.0].

Conversion de HSL en RVB

Pour convertir l’autre façon dont nous utilisons l’inverse des calculs précédents.

Si S = 0, R = G = B = L

Sinon, il existe six cas dépendants de teinte :

Si H est supérieur à 0, les valeurs se trouvent dans le secteur rouge/magenta où R>B>G.

'étape d’equaiton mathématique étape 1 de six conversion de couleur hsl en rvb.

Si H est supérieur ou égal à 0 et inférieur à 1, les valeurs se trouvent dans le secteur rouge/jaune où R>G>B.

'étape d’equaiton mathématique, étape 2 de six conversion de couleur hsl en rvb.

Si H est supérieure ou égale à 1 et inférieure à 2, les valeurs se trouvent dans le secteur jaune/vert où G>R>B.

'étape d’equaiton mathématique, étape 3 de six conversion de couleur hsl en rvb.

Si H est supérieur ou égal à 2 et inférieur à 3, les valeurs se trouvent dans le secteur vert/cyan où G>B>R.

'étape mathématique de l’equaiton, étape quatre de six conversion de couleur hsl en rvb.

Si H est supérieur ou égal à 3 et inférieur à 4, les valeurs se trouvent dans le secteur cyan/bleu où B>G>R.

'étape d’equaiton mathématique à l’étape cinq de six conversion de couleur hsl en rvb.

Si H est supérieur ou égal à 4, les valeurs se trouvent dans le secteur bleu/magenta où B>R>G.

'étape mathématique de l’equaiton, étape six de six conversion de couleur hsl en rvb.

Étant donné que les modes de fusion rendent des combinaisons arbitraires de composants HSL à partir de deux couleurs différentes, il est courant que la valeur RVB convertie soit hors gamme, autrement dit, un ou plusieurs composants de canal peuvent être en dehors de la plage légale de [0.0, 1.0]. Ces couleurs sont ramenées en gamut en réduisant au minimum la saturation, tout en préservant à la fois la teinte et la luminosité :

formule mathématique décrivant les corrections requises pour les instances hors gamut.

Bitmap de sortie

La bitmap de sortie pour cet effet est toujours la taille de l’union des deux images d’entrée.

Exemple de code

Pour obtenir un exemple de cet effet, téléchargez l’exemple modes d’effet composite Direct2D.

Exigences

Exigence Valeur
Client minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect