Faltungsmatrixeffekt

Verwenden Sie den konvolvierten Matrixeffekt, um einen beliebigen 2D-Kernel auf ein Image anzuwenden. Sie können diesen Effekt verwenden, um Unschärfen zu erkennen, Kanten, Ränder zu erkennen oder ein Bild zu schärfen.

Die CLSID für diesen Effekt ist CLSID _ D2D1ConvolveMatrix.

Beispielbild

Das hier gezeigte Beispiel zeigt die Eingabe und Ausgabe des konvolviven Matrixeffekts mit einem 3 x 3-Kernel.

Vorher
das Bild vor dem Effekt.
Nach
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();

Effect-Eigenschaften

Anzeigename und Indexenumeration BESCHREIBUNG
KernelUnitLength
D2D1 _ CONVOLVEMATRIX _ PROP _ KERNEL _ UNIT _ LENGTH
Die Größe einer Einheit im Kernel. Die Einheiten befinden sich in (DIPs/Kerneleinheit), wobei eine Kerneleinheit die Größe des Elements im Konvolutionskernel ist. Der Wert 1 (DIP/Kerneleinheit) entspricht einem Pixel in einem Bild mit 96 DPI.
Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
Scalemode
D2D1 _ CONVOLVEMATRIX _ PROP _ SCALE _ MODE
Der Interpolationsmodus, den der Effekt verwendet, um das Bild auf die entsprechende Länge der Kerneleinheit zu skalieren. Es gibt sechs Skalierungsmodi, die in Qualität und Geschwindigkeit reichen.
Der Typ ist der _ CONVOLVEMATRIX-SKALIERUNGSMODUS D2D1. _ _
Der Standardwert ist D2D1 _ CONVOLVEMATRIX _ SCALE _ MODE _ LINEAR.
KernelSizeX
D2D1 _ CONVOLVEMATRIX _ PROP _ KERNEL _ SIZE _ X
Die Breite der Kernelmatrix. 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 Kernelmatrix. Die Einheiten werden in Kerneleinheiten angegeben. Der Typ ist UINT32.
Der Standardwert ist 3.
KernelMatrix
D2D1 _ CONVOLVEMATRIX _ PROP _ KERNEL _ MATRIX
Die Kernelmatrix, die auf das Image angewendet werden soll. Die Kernelelemente sind nicht gebunden und werden als float-Elemente angegeben.
Der erste Satz von KernelSizeX-Zahlen in FLOAT [ ] entspricht der ersten Zeile im Kernel. Die zweite Gruppe von KernelSizeX-Zahlen entspricht der zweiten Zeile und so weiter 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 Kernelmatrix wird auf ein Pixel angewendet, und dann wird das Ergebnis durch diesen Wert geteilt.
0 verhält sich wie der Wert float epsilon.
Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
Verzerrung (Bias)
D2D1 _ CONVOLVEMATRIX _ PROP _ BIAS
Der Effekt wendet die Kernelmatrix, den Divisor an, und dann wird die Verzerrung zum Ergebnis hinzugefügt. Der Bias ist ungebunden und unitlos. Der Typ ist FLOAT.
Der Standardwert ist 0,0f.
KernelOffset
D2D1 _ CONVOLVEMATRIX _ PROP _ KERNEL _ OFFSET
Verschiebt den Konvolutionskernel von einer zentrierten Position auf dem Ausgabepixel in eine Position, die Sie links/rechts und nach oben/unten angeben. Der Offset wird in Kerneleinheiten definiert.
Bei einigen Offsets und Kernelgrößen werden die Convolutionskernel-Beispiele nicht in ein Pixelbildcenter gelandet. Die Pixelwerte für das Kernelbeispiel 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 Konvolutionskernel auf den Alphakanal oder nur auf die Farbkanäle angewendet wird.
Wenn Sie dies auf TRUE festlegen, wird der Konvolutionskernel nur auf die Farbkanäle angewendet.
Wenn Sie dies auf FALSE festlegen, wird der Konvolutionskernel auf alle Kanäle angewendet.
Der Typ ist BOOL.
Der Standardwert ist FALSE.
BorderMode
D2D1 _ CONVOLVEMATRIX _ PROP _ BORDER _ MODE
Der Modus, der verwendet wird, um den Rahmen des Bilds zu berechnen, soft oder hard. Weitere Informationen finden Sie unter Rahmenmodi.
Der Typ ist D2D1 _ BORDER _ MODE.
Der Standardwert ist D2D1 _ BORDER _ MODE _ SOFT.
ClampOutput
D2D1 _ CONVOLVEMATRIX _ _ PROP-KLAMMERAUSGABE _
Gibt an, ob der Effekt Farbwerte auf zwischen 0 und 1 klammert, bevor der Effekt die Werte an den nächsten Effekt im Diagramm übergibt. Der Effekt klammert die Werte vor der Prämultiplierung des Alpha-.
Wenn Sie dies auf TRUE festlegen, klammert der Effekt die Werte. Wenn Sie dies auf FALSE festlegen, klammert der Effekt die Farbwerte nicht, aber andere Effekte und die Ausgabeoberfläche können die Werte klammern, wenn sie nicht hoch genug sind.
Der Typ ist BOOL.
Der Standardwert ist FALSE.

Skalierungsmodi

Enumeration Beschreibung
D2D1 _ CONVOLVEMATRIX _ SCALE _ MODE _ NEAREST _ NEIGHBOR Probieren Sie den nächstgelegenen einzelnen Punkt aus, und verwendet diesen. Dieser Modus verwendet weniger Verarbeitungszeit, gibt jedoch das Bild mit der niedrigsten Qualität aus.
D2D1 _ CONVOLVEMATRIX _ SCALE _ MODE _ LINEAR Verwendet eine Vier-Punkt-Stichprobe und lineare Interpolation. Dieser Modus gibt ein Bild mit höherer Qualität als der nächste Nachbarmodus aus.
D2D1 _ CONVOLVEMATRIX _ SCALE MODE _ _ KUBISCH Verwendet einen kubischen Kernel mit 16 Beispielen für die Interpolation. In diesem Modus wird die meiste Verarbeitungszeit verwendet, aber es wird ein Bild mit höherer Qualität ausgegeben.
D2D1 _ CONVOLVEMATRIX _ SCALE _ MODE _ MULTI _ SAMPLE _ LINEAR Verwendet vier lineare Stichproben innerhalb eines einzelnen Pixels für ein gutes Edge-Antialiasing. Dieser Modus eignet sich gut für das Herunterskalierung um kleine Mengen auf Bildern mit wenigen Pixeln.
D2D1 _ CONVOLVEMATRIX _ SCALE MODE _ _ ANISOTROP Verwendet die Anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap abzubilden.
D2D1 _ CONVOLVEMATRIX _ SCALE _ MODE _ HIGH _ QUALITY _ CUBIC Verwendet einen kubischen Kernel variabler Größe, um das Bild vorab herunterzuskalieren, wenn die Transformationsmatrix eine Downskalierung umfasst. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe.

Hinweis

Wenn Sie keinen Modus auswählen, wird standardmäßig D2D1 _ CONVOLVEMATRIX _ SCALE MODE LINEAR _ _ verwendet.

Rahmenmodi

Name BESCHREIBUNG
D2D1 _ BORDER _ MODE _ SOFT Der Effekt aufgefüllt das Eingabebild mit transparenten schwarzen Pixeln für Stichproben außerhalb der Eingabegrenzen, wenn der Konvolutionskernel angewendet wird. Dadurch wird ein weicher Rand für das Bild erstellt, und im Prozess wird die Ausgabebitmap um die Größe des Kernels erweitert.
D2D1 _ BORDER _ MODE _ HARD Der Effekt erweitert das Eingabebild um eine Rahmentransformation des Spiegeltyps für Stichproben außerhalb der Eingabegrenzen. Die Größe der Ausgabebitmap entspricht der Größe der Eingabebitmap.

Ausgabebitmap

Die Größe der Ausgabe des Effekts hängt von der Größe des Konvolutionskernels, dem Kerneloffset, der Länge der Kerneleinheit und der Einstellung für den Rahmenmodus ab.

Requirements (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