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
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 de l’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 de fusion. 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 * B A + FRVB * FA * (1 - BA) + BRVB * BA * (1 - FA)

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

Où :

  • OPRVB est la couleur de sortie prémultipliée
  • OA est l’alpha de sortie
  • BRVB est la couleur de destination non multipliée
  • BA est l’alpha de destination
  • FRVB est la couleur source non multipliée
  • FA est l’alpha source
  • f(SRVB, DRVB) est une fonction de fusion qui varie selon le mode de fusion

Certains modes de fusion nécessitent une conversion vers et depuis la teinte, la saturation, l’espace de couleur de luminosité (TSL) 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 densité couleur +.
D2D1_BLEND_MODE_LINEAR_BURN Formules de fusion de base avec f(FRVB, BRVB) = Formule mathématique pour un effet de densité linéaire +.
D2D1_BLEND_MODE_DARKER_COLOR Formule de fusion de base pour alpha uniquement. Formule mathématique pour un effet de couleur foncée.
D2D1_BLEND_MODE_LIGHTEN Formule de fusion de base pour alpha uniquement. Formule mathématique pour un effet d’éclaircissement.
D2D1_BLEND_MODE_SCREEN Formule de fusion de base pour alpha uniquement. Formule mathématique pour un effet écran.
D2D1_BLEND_MODE_COLOR_DODGE Formules de fusion de base avec f(FRVB, BRVB) = Formule mathématique pour un effet de densité couleur -.
D2D1_BLEND_MODE_LINEAR_DODGE Formules de fusion de base avec f(FRVB, BRVB) = Formule mathématique pour un effet de densité linéaire -.
D2D1_BLEND_MODE_LIGHTER_COLOR Formule de fusion de base pour alpha uniquement. Formule mathématique pour un effet de couleur plus claire.
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(FRVB, 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 de lumière vive.
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 ponctuelle.
D2D1_BLEND_MODE_HARD_MIX Formules de fusion de base avec f(FRVB, BRVB) = Formule mathématique pour un effet de mélange maximal.
D2D1_BLEND_MODE_DIFFERENCE Formules de fusion de base avec f(FRVB, BRVB) = abs(FRVB - BRVB)
D2D1_BLEND_MODE_EXCLUSION Formules de fusion de base avec f(FRVB, 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 mélange de luminosité.
D2D1_BLEND_MODE_DISSOLVE Soit :
  • 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 cote 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 de soustraction.
D2D1_BLEND_MODE_DIVISION Formule de fusion de base pour alpha uniquement. Formule mathématique pour un effet de fusion de division.

Remarque

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

Conversions d’espace de couleurs TSL

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

  • kR = 0,30
  • kG = 0,59
  • kB = 0,11

Conversion de RVB en TSL

formule mathématique décrivant la transformation de couleur rvb en couleur tsl.

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

Conversion de TSL en RVB

Pour convertir dans l’autre sens, nous utilisons l’inverse des calculs précédents.

Si S = 0, alors R = V = 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 1/6 de l’équation mathématique de conversion de couleur tsl 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>V>B.

étape 2/6 de l’équation mathématique de conversion de couleur tsl en rvb.

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

étape 3/6 de l’équation mathématique de conversion de couleur tsl 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 4/6 de l’équation mathématique de conversion de couleur tsl 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 5/6 de l’équation mathématique de conversion de couleur tsl en rvb.

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

étape 6/6 de l’équation mathématique de conversion de couleur tsl en rvb.

Étant donné que les modes de fusion rendent des combinaisons arbitraires de composants TSL à 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 autorisée de [0.0, 1.0]. Ces couleurs sont ramenées en gamme de couleurs 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 gamme de couleurs.

Image bitmap de sortie

L’image 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 de modes d’effet composite Direct2D.

Spécifications

Condition requise Value
Client minimal pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications bureautiques | applications du Windows Store]
Serveur minimal pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications bureautiques | applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect