Faltungsmatrixeffekt
Verwenden Sie den konvolvierten Matrixeffekt, um einen beliebigen 2D-Kernel auf ein Bild anzuwenden. Sie können diesen Effekt verwenden, um Ränder und Reliefs zu erkennen oder ein Bild scharfzuzeichnen.
Die CLSID für diesen Effekt ist CLSID_D2D1ConvolveMatrix.
- Beispielbild
- Effekteigenschaften
- Skalierungsmodi
- Rahmenmodi
- Ausgabebitmap
- Anforderungen
- Verwandte Themen
Beispielbild
Das folgende Beispiel zeigt die Eingabe und Ausgabe des konvolvierenden Matrixeffekts mit einem 3x3-Kernel.
Vorher |
---|
After |
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);
convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(convolveMatrixEffect.Get());
m_d2dContext->EndDraw();
Effekteigenschaften
Anzeigename und Indexenumeration | Beschreibung |
---|---|
KernelUnitLength D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH |
Die Größe einer Einheit im Kernel. Die Einheiten befinden sich in (DIPs/Kernel-Einheit), wobei eine Kernel-Einheit die Größe des Elements im Konvolution-Kernel ist. Ein Wert von 1 (DIP/Kernel-Einheit) entspricht einem Pixel in einem Bild mit 96 DPI. Der Typ ist FLOAT. Der Standardwert lautet 1.0f. |
Scalemode D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE |
Der Interpolationsmodus, den der Effekt verwendet, um das Bild auf die entsprechende Kernel-Einheitslänge zu skalieren. Es gibt sechs Skalenmodi, die sich in Qualität und Geschwindigkeit unterscheiden. Der Typ ist D2D1_CONVOLVEMATRIX_SCALE_MODE. Der Standardwert ist D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR. |
KernelSizeX D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X |
Die Breite der Kernel-Matrix. Die Einheiten werden in Kerneleinheiten angegeben. Der Typ ist UINT32. Der Standardwert ist 3. |
KernelSizeY D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y |
Die Höhe der Kernel-Matrix. Die Einheiten werden in Kerneleinheiten angegeben. Der Typ ist UINT32. Der Standardwert ist 3. |
KernelMatrix D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX |
Die Kernel-Matrix, die auf das Image angewendet werden soll. Die Kernelel-Emente sind nicht gebunden und werden als Float-Elemente angegeben. Der erste Satz von KernelSizeX-Zahlen in FLOAT[] entspricht der ersten Zeile im Kernel. Der zweite Satz von KernelSizeX-Zahlen entspricht der zweiten Zeile usw. bis zu KernelSizeY-Zeilen. Der Typ ist FLOAT[]. Der Standardwert ist {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}. |
Divisor D2D1_CONVOLVEMATRIX_PROP_DIVISOR |
Die Kernel-Matrix wird auf ein Pixel angewendet, und das Ergebnis wird durch diesen Wert dividiert. 0 verhält sich als Wert von Float Epsilon. Der Typ ist FLOAT. Der Standardwert lautet 1.0f. |
Bias D2D1_CONVOLVEMATRIX_PROP_BIAS |
Der Effekt wendet die Kernel-Matrix, den Divisor und dann den Trend auf das Ergebnis an. Der Trend ist ungebunden und einheitslos. Der Typ ist FLOAT. Der Standardwert lautet 0.0f. |
KernelOffset D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET |
Verschiebt den Konvolution-Kernel von einer zentrierten Position auf dem Ausgabepixel zu einer Position, die Sie links/rechts und oben/unten angeben. Der Offset wird in Kernel-Einheiten definiert. Bei einigen Offsets und Kernel-Größen landen die Beispielen des Konvolution-Kernels nicht in einem Pixelbild-Center. Die Pixelwerte für das Kernel-Beispiel werden durch bilineare Interpolation berechnet. Der Typ ist D2D1_VECTOR_2F. Der Standardwert ist {0.0f, 0.0f}. |
PreserveAlpha D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA |
Gibt an, ob der Konvolution-Kernel auf den Alphakanal oder nur auf die Farbkanäle angewendet wird. Wenn Sie dies auf TRUE festlegen, wird der Konvolution-Kernel nur auf die Farbkanäle angewendet. Wenn Sie dies auf FALSE festlegen, wird der Konvolution-Kernel auf alle Kanäle angewendet. Der Typ ist BOOL. Der Standardwert ist FALSCH. |
BorderMode D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE |
Der Modus, der zum Berechnen des Rahmens des Bilds verwendet wird, weich oder hart. Weitere Informationen finden Sie unter Rahmenmodi. Der Typ ist D2D1_BORDER_MODE. Der Standardwert ist D2D1_BORDER_MODE_SOFT. |
ClampOutput D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT |
Gibt an, ob der Effekt die Farbwerte auf einen Wert zwischen 0 und 1 festlegt, bevor er die Werte an den nächsten Effekt im Diagramm weitergibt. Der Effekt legt die Werte fest, bevor er das Alpha vormultipliziert. Wenn Sie dies auf TRUE setzen, werden die Werte durch den Effekt festgelegt. Wenn Sie diese Option auf FALSE setzen, werden die Farbwerte nicht festgelegt, aber andere Effekte und die Ausgabeoberfläche können die Werte festlegen, wenn sie nicht von hoher Genauigkeit sind. Der Typ ist BOOL. Der Standardwert ist FALSCH. |
Skalierungsmodi
Enumeration | Beschreibung |
---|---|
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR | Ermittelt den nächstgelegenen einzelnen Punkt an und verwendet ihn. Dieser Modus verwendet weniger Verarbeitungszeit, gibt jedoch das Bild mit der niedrigsten Qualität aus. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR | Verwendet ein Beispiel mit vier Punkten und eine lineare Interpolation. Dieser Modus gibt ein Bild mit höherer Qualität als den Pixelwiederholungsmodus aus. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC | Verwendet einen 16-Bildpunkt-Kubik-Kernel für die Interpolation. Dieser Modus verwendet die meiste Verarbeitungszeit, gibt jedoch ein Bild mit höherer Qualität aus. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR | Verwendet vier lineare Bildpunkte innerhalb eines einzelnen Pixels für ein gutes Antialiasing am Rand. Dieser Modus eignet sich gut für die Skalierung von kleinen Mengen an Bildern mit wenigen Pixeln. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC | Verwendet die anisotrope Filterung, um ein Muster gemäß der transformierten Form der Bitmap zu erfassen. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC | Verwendet einen kubischen Kernel mit variabler Größe mit hoher Qualität, um ein Bild vorab zu verkleinern, wenn die Transformationsmatrix Downscaling umfasst. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe. |
Hinweis
Wenn Sie keinen Modus auswählen, wird der Effekt standardmäßig auf D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR festgelegt.
Rahmenmodi
Name | Beschreibung |
---|---|
D2D1_BORDER_MODE_SOFT | Der Effekt füllt das Eingabebild mit transparenten schwarzen Pixeln für Samples außerhalb der Eingabegrenzen auf, wenn er den Konvolution-Kernel anwendet. Dadurch wird eine weiche Kante für das Bild erstellt, und im Prozess wird die Ausgabe-Bitmap um die Größe des Kernels erweitert. |
D2D1_BORDER_MODE_HARD | Der Effekt erweitert das Eingabebild mit einer Spiegel-Rahmentransformation für Bildpunkte außerhalb der Eingabegrenzen. Die Größe der Ausgabe-Bitmap entspricht der Größe der Eingabe-Bitmap. |
Ausgabebitmap
Die Größe der Ausgabe des Effekts hängt von der Größe des Konvolution-Kernel, dem Kernel-Offset, der Kernel-Einheitslänge und der Einstellung des Rahmenmodus ab.
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 |