Share via


Effet composite arithmétique

Utilisez l’effet composite arithmétique pour combiner 2 images à l’aide d’une somme pondérée de pixels des images d’entrée.

Le CLSID de cet effet est CLSID_D2D1ArithmeticComposite.

Formule

La formule ici est utilisée pour calculer cet effet.

Sortiergba = C1 * Sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Où C1, C2, C3, C4 sont des coefficients que vous définissez.

Les coefficients correspondent aux valeurs d’un D2D1_VECTOR_4F (x, y, z, w) :

  • x = C1
  • y = C2
  • z = C3
  • w = C4

Exemple d’image

Un exemple simple consiste à ajouter les pixels source et de destination. Dans l’exemple, 2 rectangles arrondis sont composites ensemble. Le rectangle source est bleu et la destination est rouge.

L’image ici est la sortie de l’effet Composite arithmétique avec les coefficients de l’équation définis sur les valeurs ici.

  • C1 = 0
  • C2 = 1
  • C3 = 1
  • C4 = 0

exemple d’image montrant 2 rectangles arrondis de la même taille qui se chevauchent à l’aide de l’effet composite arithmétique.

Le résultat est que les valeurs de pixel pour la source et la destination sont ajoutées. Les régions où les rectangles ne chevauchent pas les valeurs RVBA sont toutes 0. Lorsque les rectangles se chevauchent, la couleur est magenta, car les valeurs R et B sont toutes deux au maximum.

Voici un autre exemple d’image avec du code.

Avant l’image 1
première image source avant l’effet.
Avant l’image 2
la deuxième image avant l’effet.
After
image après la transformation.
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);

arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(arithmeticCompositeEffect.Get());
m_d2dContext->EndDraw();

Propriétés d’effet

Nom d’affichage et énumération d’index Description
Coefficients
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Coefficients de l’équation utilisée pour compositer les deux images d’entrée. Les coefficients sont unitaires et non liés. Le type est D2D1_VECTOR_4F.
La valeur par défaut est {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
L’effet fixe les valeurs de couleur entre 0 et 1 avant que l’effet ne passe les valeurs à l’effet suivant dans le graphique.
Si vous définissez cette valeur sur TRUE, l’effet va serrer les valeurs. Si vous définissez cette valeur sur FALSE, l’effet ne serrera pas les valeurs de couleur, mais d’autres effets et la surface de sortie peuvent serrer les valeurs si elles ne sont pas suffisamment précises.
Le type est BOOL.
La valeur par défaut est FALSE.

Bitmap de sortie

La bitmap de sortie dépend des valeurs de coefficient. Il s’agit des tailles bitmap de sortie possibles.

  • Si C1 est le seul coefficient non nul, la taille de sortie est l’intersection des rectangles d’entrée.
  • Si C2 est le seul coefficient non nul, la taille de sortie est la taille du rectangle source.
  • Si C3 est le seul coefficient non nul, la taille de sortie est la taille du rectangle de destination.
  • Si tous les coefficients sont nuls, la taille de sortie est un rectangle vide.
  • Pour toutes les autres valeurs de coefficient, la taille de sortie est l’union des rectangles d’entrée.

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimal 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