Freigeben über


Konvolvierender Matrixeffekt

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

Die CLSID für diesen Effekt ist CLSID_D2D1ConvolveMatrix.

Beispielbild

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

Vor
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();

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 Kerneleinheit 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 ist 1,0f.
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Der Interpolationsmodus, den der Effekt verwendet, um das Bild auf die entsprechende Kerneleinheitslänge zu skalieren. Es gibt sechs Skalierungsmodi, die in Qualität und Geschwindigkeit reichen.
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 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 im 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 Kernelmatrix 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 ist 1,0f.
Vorurteil
D2D1_CONVOLVEMATRIX_PROP_BIAS
Der Effekt wendet die Kernelmatrix, den Divisor und dann die Verzerrung zum Ergebnis an. Die Verzerrung ist ungebunden und einheitslos. Der Typ ist FLOAT.
Der Standardwert ist 0,0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Verschiebt den Konvolutionskern von einer zentrierten Position auf dem Ausgabepixel an eine Position, die Sie links/rechts und nach oben/unten angeben. Der Offset wird in Kerneleinheiten definiert.
Bei einigen Offsets und Kernelgrößen landen die Beispielen des Konvolution-Kernels nicht in einem Pixelbildcenter. 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 Konvolutionskern auf den Alphakanal oder nur auf die Farbkanäle angewendet wird.
Wenn Sie dies auf TRUE festlegen, der Konvolution kernel nur auf die Farbkanäle angewendet wird.
Wenn Sie dies auf FALSE festlegen, wird der Konvolution-Kernel auf alle Kanäle angewendet.
Der Typ ist BOOL.
Der Standardwert ist FALSE.
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 Farbwerte zwischen 0 und 1 einklammert, bevor der Effekt die Werte an den nächsten Effekt im Diagramm übergibt. Der Effekt klemmt die Werte vor der Multiplikation des Alphas.
Wenn Sie dies auf TRUE festlegen, klammert der Effekt die Werte. Wenn Sie dies auf FALSE festlegen, klammert der Effekt nicht die Farbwerte, aber andere Effekte und die Ausgabeoberfläche können die Werte klammern, wenn sie nicht von hoher Genauigkeit sind.
Der Typ ist BOOL.
Der Standardwert ist FALSE.

Skalierungsmodi

Aufzählung Beschreibung
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Gibt den nächstgelegenen einzelnen Punkt an und verwendet dies. 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 nächsten Benachbarten Modus aus.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Verwendet einen 16 Beispiel-Kubikkern 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 Beispiele innerhalb eines einzelnen Pixels für eine gute Antialiasierung 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 probieren.
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 Downscaling an der Transformationsmatrix beteiligt ist. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe.

Anmerkung

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 Die Effektpads des Eingabebilds mit transparenten schwarzen Pixeln für Beispiele außerhalb der Eingabegrenzen, wenn sie den Konvolutionskern anwendet. Dadurch wird eine weiche Kante 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 mit einer Spiegelrahmentransformation für Beispiele 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 Konvolutionskerns, dem Kerneloffset, der Kerneleinheitslänge und der Einstellung des Rahmenmodus ab.

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Mindestens unterstützter Server Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Kopfball d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect-