Freigeben über


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

Das folgende Beispiel zeigt die Eingabe und Ausgabe des konvolvierenden Matrixeffekts mit einem 3x3-Kernel.

Vorher
das Bild vor dem Effekt.
After
das Bild nach der Transformation.
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

ID2D1Effect