Freigeben über


Arithmetischer zusammengesetzter Effekt

Verwenden Sie den arithmetischen zusammengesetzten Effekt, um 2 Bilder mit einer gewichteten Summe von Pixeln aus den Eingabebildern zu kombinieren.

Die CLSID für diesen Effekt ist CLSID_D2D1ArithmeticComposite.

Formel

Die folgende Formel wird verwendet, um diesen Effekt zu berechnen.

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

Dabei sind C1, C2, C3, C4 Koeffizienten, die Sie festlegen.

Die Koeffizienten entsprechen den Werten in einem D2D1_VECTOR_4F (x, y, z, w):

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

Beispielbild

Ein einfaches Beispiel ist das Hinzufügen der Quell- und Zielpixel. Im Beispiel werden zwei abgerundete Rechtecke zusammengesammelt. Das Quellrechteck ist blau, und das Ziel ist rot.

Das Bild hier ist die Ausgabe des arithmetischen Zusammengesetzten Effekts mit den Koeffizienten der Formel, die hier auf die Werte festgelegt sind.

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

ein Beispielbild mit 2 abgerundeten Rechtecke derselben Größe, die sich mit dem arithmetischen zusammengesetzten Effekt überlappen.

Das Ergebnis ist, dass die Pixelwerte für die Quelle und das Ziel hinzugefügt werden. Die Bereiche, in denen die Rechtecke die RGBA-Werte nicht überlappen, sind alle 0. Wenn die Rechtecke die Farbe überlappen, ist Magenta, da die Werte R und B beide maximal liegen.

Hier sehen Sie ein weiteres Beispielbild mit Code.

Vor Bild 1
das erste Quellbild vor dem Effekt aus.
Vor Bild 2
das zweite Bild vor dem Effekt.
Nach
das Bild nach der 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();

Effekteigenschaften

Anzeigename und Indexenumeration Beschreibung
Koeffizienten
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Die Koeffizienten für die Formel, die zum Zusammengesetzten der beiden Eingabebilder verwendet werden. Die Koeffizienten sind einheitslos und ungebunden. Typ ist D2D1_VECTOR_4F.
Der Standardwert ist {1,0f, 0,0f, 0,0f, 0,0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
Der Effekt klemmt Farbwerte zwischen 0 und 1, bevor der Effekt die Werte an den nächsten Effekt im Diagramm übergibt.
Wenn Sie dies auf TRUE festlegen, klammert der Effekt die Werte. Wenn Sie dies auf FALSE festlegen, klammert der Effekt nicht die Farbwerte, aber andere Effekte und die Ausgabeoberfläche können die Werte klammern, wenn sie nicht von hoher Genauigkeit sind.
Typ ist BOOL.
Der Standardwert ist FALSE.

Ausgabebitmap

Die Ausgabebitmap hängt von den Koeffizientenwerten ab. Dies sind die möglichen Ausgabebitmapgrößen.

  • Wenn C1 der einzige Nicht-Null-Koeffizienten ist, ist die Ausgabegröße der Schnittpunkt der Eingaberechtecke.
  • Wenn C2 der einzige Nicht-Null-Koeffizienten ist, ist die Ausgabegröße die Größe des Quellrechtecks.
  • Wenn C3 der einzige Nicht-Null-Koeffizienten ist, ist die Ausgabegröße die Größe des Zielrechtecks.
  • Wenn alle Koeffizienten null sind, ist die Ausgabegröße ein leeres Rechteck.
  • Bei allen anderen Koeffizientenwerten ist die Ausgabegröße die Vereinigung der Eingaberechtecke.

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Mindestens unterstützter Server Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Kopfball d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect-