Fülleffekt

Verwenden Sie den Blendeffekt, um 2 Bilder zu kombinieren. Dieser Effekt hat 26 Mischmodi.

Die CLSID für diesen Effekt ist CLSID_D2D1Blend.

Beispiele für das Mischen

Hier sehen Sie ein Beispielbild für jeden Füllmodus des Blendeffekts. Eine vollständige Liste der Mischmodi und der entsprechenden Moduseigenschaften finden Sie im nächsten Abschnitt.

Screenshot des Effektbeispiels aller verfügbaren Mischmodi.

Hier sehen Sie ein weiteres Beispiel für die Verwendung des Ausschlussmodus.

Vor Bild 1
das erste Quellbild vor dem Effekt.
Vor Bild 2
das zweite Bild vor dem Effekt.
Nach
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 Indexaufzählung 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.

Füllmethoden

Die folgende Tabelle zeigt alle Mischmodi dieses Effekts. 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) + BA

Hierbei gilt:

  • OPRGB ist die vorab multiplizierte Ausgabefarbe
  • OA ist Ausgabe alpha
  • BRGB ist die nicht vor multiplizierte Zielfarbe
  • BA ist Ziel-Alpha
  • FRGB ist die nicht vor multiplizierte 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 Farbraum Farbton, Sättigung, Leuchtkraft (HSL) 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 mutiply-Effekt.
D2D1_BLEND_MODE_COLOR_BURN Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Coor-Brenneffekt.
D2D1_BLEND_MODE_LINEAR_BURN Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Brenneffekt.
D2D1_BLEND_MODE_DARKER_COLOR Einfache Mischungsformel nur für Alpha. Mathematische Formla für einen dunklen Farbeffekt.
D2D1_BLEND_MODE_LIGHTEN Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen aufhellenden Effekt.
D2D1_BLEND_MODE_SCREEN Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Bildschirmeffekt.
D2D1_BLEND_MODE_COLOR_DODGE Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Farb-Dodge-Effekt.
D2D1_BLEND_MODE_LINEAR_DODGE Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Dodge-Effekt.
D2D1_BLEND_MODE_LIGHTER_COLOR Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen helleren Farbeffekt.
D2D1_BLEND_MODE_OVERLAY Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Überlagerungseffekt.
D2D1_BLEND_MODE_SOFT_LIGHT Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Sanftlichteffekt.
D2D1_BLEND_MODE_HARD_LIGHT Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen harten Lichteffekt.
D2D1_BLEND_MODE_VIVID_LIGHT Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen lebendigen Lichteffekt.
D2D1_BLEND_MODE_LINEAR_LIGHT Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen linearen Lichteffekt.
D2D1_BLEND_MODE_PIN_LIGHT Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen Pin-Light-Effekt.
D2D1_BLEND_MODE_HARD_MIX Grundlegende Mischungsformeln mit f(FRGB, BRGB) = Mathematische Formel für einen harten Mixeffekt.
D2D1_BLEND_MODE_DIFFERENCE Grundlegende Mischungsformeln mit f(FRGB, BRGB) = abs(FRGB - BRGB)
D2D1_BLEND_MODE_EXCLUSION Grundlegende Mischungsformeln mit f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB
D2D1_BLEND_MODE_HUE Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Farbton-Mischeffekt.
D2D1_BLEND_MODE_SATURATION Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Sturationsmischungseffekt.
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 Leuchtkraft-Blend-Effekt.
D2D1_BLEND_MODE_DISSOLVE Gegeben:
  • Eine Szenenkoordinate XY für das aktuelle Pixel
  • Ein deterministischer Pseudo-Zufallszahlengenerator rand(XY) basierend auf der Startkoordinate XY mit unvoreingenommener Verteilung von Werten aus [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 Mischungseffekt.
D2D1_BLEND_MODE_DIVISION Einfache Mischungsformel nur für Alpha. Mathematische Formel für einen Bereichsmischungseffekt.

Hinweis

Bei allen Blend-Modi wird der Ausgabewert vormultipliziert und an den Bereich [0, 1] geklemmt.

HSL-Farbraumkonvertierungen

Die Luminosity-Komponente wird unter Verwendung der RGB-Gewichte berechnet:

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

Konvertieren von RGB zu 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 zu konvertieren, verwenden wir die Inverse der vorherigen Berechnungen.

Wenn S = 0, dann R = G = B = L

Andernfalls gibt es sechs Farbtonabhängige Fälle:

Wenn H größer als 0 ist, befinden sich die Werte im roten/magenta-Sektor, in dem R>B>G.

mathematischer Äquaiton Schritt 1 von sechs konvertierung hsl farbe in rgb.

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

mathematische äquaiton Schritt 2 von sechs, die hsl-Farbe in RGB konvertieren.

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

mathematische äquaiton Schritt 3 von sechs konvertieren hsl-Farbe in RGB.

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

mathematische äquaiton Schritt 4 von sechs, die hsl-Farbe in RGB konvertieren.

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

mathematische äquaiton Schritt fünf von sechs, die HSL-Farbe in RGB konvertieren.

Wenn H größer als oder gleich 4 ist, befinden sich die Werte im blauen/magenta-Sektor, in dem B>R>G liegt.

mathematische äquaiton Schritt sechs von sechs, die HSL-Farbe in RGB konvertieren.

Da die Füllmodi beliebige Kombinationen von HSL-Komponenten aus zwei verschiedenen Farben herstellen, ist es üblich, dass der konvertierte RGB-Wert außerhalb des Farbraums liegt, d. h. eine oder mehrere Kanalkomponenten können außerhalb des gesetzlichen Bereichs von [0.0, 1.0] liegen. Diese Farben werden wieder in den Farbraum gebracht, indem die Sättigung minimal reduziert wird, wobei sowohl Farbton als auch Leuchtkraft erhalten bleiben:

mathematische Formel, die die Korrekturen beschreibt, die für Instanzen außerhalb des Gamuts erforderlich sind.

Ausgabe-Bitmap

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

Beispielcode

Laden Sie das Beispiel für zusammengesetzte Direct2D-Effektmodi herunter, um ein Beispiel für diesen Effekt zu erhalten.

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