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
- Effekteigenschaften
- Skalierungsmodi
- Rahmenmodi
- Ausgabebitmap-
- Anforderungen
- Verwandte Themen
Beispielbild
Das folgende Beispiel zeigt die Eingabe und Ausgabe des konvolvierenden Matrixeffekts mit einem 3 x 3-Kernel.
Vor |
---|
![]() |
Nach |
![]() |
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 |