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
- Effekteigenschaften
- Füllmethoden
- HSL-Farbraumkonvertierungen
- Ausgabebitmap
- Beispielcode
- Anforderungen
- Verwandte Themen
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.
Hier ist ein weiteres Beispiel für die Verwendung des Exclusions-Modus.
Vor Bild 1 |
---|
Vor Bild 2 |
After |
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. |
D2D1_BLEND_MODE_MULTIPLY | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_COLOR_BURN | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_BURN | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_DARKER_COLOR | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_LIGHTEN | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_SCREEN | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_COLOR_DODGE | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_DODGE | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LIGHTER_COLOR | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_OVERLAY | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_SOFT_LIGHT | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_LIGHT | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_VIVID_LIGHT | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_LINEAR_LIGHT | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_PIN_LIGHT | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
D2D1_BLEND_MODE_HARD_MIX | Einfache Mischungsformeln mit f(FRGB, BRGB) = |
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. |
D2D1_BLEND_MODE_SATURATION | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_COLOR | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_LUMINOSITY | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_DISSOLVE | Gegeben:
|
D2D1_BLEND_MODE_SUBTRACT | Einfache Mischungsformel nur für Alpha. |
D2D1_BLEND_MODE_DIVISION | Einfache Mischungsformel nur für Alpha. |
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
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.
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>.
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.
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.
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.
Wenn H größer als oder gleich 4 ist, befinden sich die Werte im Blau-Magenta-Sektor, wobei B>R>G.
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:
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 |