Blend-Effekt

Verwenden Sie den Blend-Effekt, um 2 Bilder zu kombinieren. Dieser Effekt hat 26 Blend-Modi.

Die CLSID für diesen Effekt ist CLSID_D2D1Blend.

Mischbeispiele

Hier ist ein Beispielbild für jeden Mischmodus des Blend-Effekts. Eine vollständige Liste der Mischmodi und der entsprechenden Moduseigenschaften finden Sie im nächsten Abschnitt.

Screenshot des Effektbeispiels aller verfügbaren Mischmodi.

Hier ist ein weiteres Beispiel für die Verwendung des Exclusions-Modus.

Vor Bild 1
das Bild der ersten Quelle vor dem Effekt.
Vor Bild 2
das zweite Bild vor dem Effekt.
After
das Bild nach der 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();

Effekteigenschaften

Anzeigename und Indexenumeration Beschreibung
Mode
D2D1_BLEND_PROP_MODE
Der für den Effekt verwendete Mischmodus. Weitere Informationen finden Sie unter Mischmodi. Der Typ ist D2D1_BLEND_MODE.
Der Standardwert ist D2D1_BLEND_MODE_MULTIPLY.

Überblendmodi

In der folgenden Tabelle sind alle Mischungsmodi dieses Effekts aufgeführt. Die Hilfsfunktionen, die zum Berechnen der Ausgabe des Effekts erforderlich sind, befinden sich im nächsten Abschnitt.

Farbe: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)

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

Hierbei gilt:

  • OPRGB ist die vor multiplizierte Ausgabefarbe
  • OA ist Ausgabe Alpha
  • BRGB ist die nicht vormultiplizierte Zielfarbe
  • BA ist Ziel-Alpha
  • FRGB ist die nicht vormultiplizierte Quellfarbe.
  • FA ist Quell-Alpha
  • f(SRGB, DRGB) ist eine Mischfunktion, die je nach Mischmodus variiert

Einige der Mischmodi erfordern eine Konvertierung in und aus dem HSL-Farbraum (Farbton, Sättigung, Leuchtdichte) in RGB.

Enumeration Gleichung
D2D1_BLEND_MODE_DARKEN Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen dunklen Effekt.
D2D1_BLEND_MODE_MULTIPLY Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Multiplikationseffekt.
D2D1_BLEND_MODE_COLOR_BURN Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Coor-Verbrennungseffekt.
D2D1_BLEND_MODE_LINEAR_BURN Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Verbrennungseffekt.
D2D1_BLEND_MODE_DARKER_COLOR Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen dunklen Farbeffekt.
D2D1_BLEND_MODE_LIGHTEN Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Aufhellungseffekt.
D2D1_BLEND_MODE_SCREEN Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Bildschirmeffekt.
D2D1_BLEND_MODE_COLOR_DODGE Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Effekt des Farbabwedelns.
D2D1_BLEND_MODE_LINEAR_DODGE Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Abwedeleffekt.
D2D1_BLEND_MODE_LIGHTER_COLOR Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen helleren Farbeffekt.
D2D1_BLEND_MODE_OVERLAY Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Überlagerungseffekt.
D2D1_BLEND_MODE_SOFT_LIGHT Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen weichen Lichteffekt.
D2D1_BLEND_MODE_HARD_LIGHT Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen harten Lichteffekt.
D2D1_BLEND_MODE_VIVID_LIGHT Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen lebendigen Lichteffekt.
D2D1_BLEND_MODE_LINEAR_LIGHT Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Lichteffekt.
D2D1_BLEND_MODE_PIN_LIGHT Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Pin-Lichteffekt.
D2D1_BLEND_MODE_HARD_MIX Einfache Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen harten Mixeffekt.
D2D1_BLEND_MODE_DIFFERENCE Einfache Mischungsformeln mit f(F RGB, BRGB) = abs(FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION Grundlegende Mischungsformeln mit f(F RGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB
D2D1_BLEND_MODE_HUE Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Farbtonmischungseffekt.
D2D1_BLEND_MODE_SATURATION Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Sättigungsmischungseffekt.
D2D1_BLEND_MODE_COLOR Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Farbmischungseffekt.
D2D1_BLEND_MODE_LUMINOSITY Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Leuchtdichte-Mischeffekt.
D2D1_BLEND_MODE_DISSOLVE Gegeben:
  • Eine Szenenkoordinate XY für das aktuelle Pixel
  • Ein deterministischer Pseudo-Zufallszahlengenerierung rand(XY) basierend auf der Seed-Koordinate XY, mit einer unverzerrte Verteilung von Werten von [0, 1]

Mathematische Formel für einen Auflösungsmischungseffekt.
D2D1_BLEND_MODE_SUBTRACT Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen subtrahieren Mischeffekt.
D2D1_BLEND_MODE_DIVISION Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Divisionsmischeffekt.

Hinweis

Für alle Mischmodi wird der Ausgabewert vormultipliziert und für den Bereich festgelegt [0, 1].

HSL-Farbraumkonvertierungen

Die Leuchtdichtenkomponente wird mit den RGB-Gewichtungen hier berechnet:

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

Konvertieren von RGB in HSL

Mathematische Formel, die die Transformation von RGB-Farbe in HSL-Farbe beschreibt.

Dadurch werden S und L im Bereich [0,0, 1,0] und H im Bereich [-1,0, 5,0] platziert.

Konvertieren von HSL in RGB

Um die andere Art und Weise zu konvertieren, verwenden wir die Umkehrung der vorherigen Berechnungen.

Wenn S = 0 then R = G = B = L

Andernfalls gibt es sechs farbtonabhängige Fälle:

Wenn H größer als 0 ist, befinden sich die Werte im Rot-Magenta-Sektor, wobei R>B>G.

Mathematischer Gleichungsschritt einer von sechs Konvertierungen der HSL-Farbe in RGB.

Wenn H größer als oder gleich 0 und kleiner als 1 ist, befinden sich die Werte im rot/gelben Sektor, wobei R>G B>.

Mathematischer Gleichungsschritt 2 von sechs Konvertierungen der HSL-Farbe in RGB.

Wenn H größer als oder gleich 1 und kleiner als 2 ist, befinden sich die Werte im gelben/grünen Sektor, wobei G>R>B.

Mathematischer Gleichungsschritt 3 von sechs Konvertierungen der HSL-Farbe in RGB.

Wenn H größer als oder gleich 2 und kleiner als 3 ist, befinden sich die Werte im Grün/Zyan-Sektor, wobei G>B>R.

Mathematischer Gleichungsschritt 4 von sechs Konvertierung der HSL-Farbe in RGB.

Wenn H größer als oder gleich 3 und kleiner als 4 ist, befinden sich die Werte im Zyan/Blau-Sektor, wobei B>G>R.

Mathematischer Gleichungsschritt 5 von sechs Konvertierungen der HSL-Farbe in RGB.

Wenn H größer als oder gleich 4 ist, befinden sich die Werte im Blau-Magenta-Sektor, wobei B>R>G.

Mathematischer Gleichungsschritt sechs von sechs Konvertierungen der HSL-Farbe in RGB.

Da die Mischungsmodi beliebige Kombinationen von HSL-Komponenten aus zwei verschiedenen Farben erstellen, ist es üblich, dass der konvertierte RGB-Wert außerhalb der Farbskala liegt, d. h. eine oder mehrere Kanalkomponenten liegen außerhalb des zulässigen Bereichs von [0,0, 1,0]. Diese Farben werden wieder in die Farbskala gebracht, indem die Sättigung minimal reduziert wird und gleichzeitig Farbton und Leuchtdichte erhalten bleiben:

Mathematische Formel, die die Korrekturen beschreibt, die für außerhalb von Farbskala-Instanzen erforderlich sind.

Ausgabebitmap

Die Ausgabe-Bitmap für diesen Effekt ist immer die Größe der Vereinigung der beiden Eingabebilder.

Beispielcode

Laden Sie für ein Beispiel für diesen Effekt den Bildpunkt für zusammengesetzte Direct2D-Effektmodi herunter.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Unterstützte Mindestversion (Server) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Header d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect