2D-affiner Transformationseffekt
Der 2D-affine Transformationseffekt wendet eine räumliche Transformation auf ein Bild basierend auf einer 3X2-Matrix mithilfe der Direct2D-Matrixtransformation und eines von sechs Interpolationsmodi an. Sie können diesen Effekt verwenden, um ein Bild zu drehen, zu skalieren, zu schiefen oder zu übersetzen. Sie können diese Vorgänge auch kombinieren. Affine Übertragungen erhalten parallele Linien und das Verhältnis von Abständen zwischen drei Punkten in einem Bild.
Die CLSID für diesen Effekt ist CLSID_D2D12DAffineTransform.
- Beispielbild
- Effekteigenschaften
- Rahmenmodi
- Interpolationsmodi
- Ausgabebitmap
- Anforderungen
- Verwandte Themen
Beispielbild
Vorher |
---|
After |
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
affineTransformEffect->SetInput(0, bitmap);
D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f, 0.1f, 0.9f, 8.0f, 45.0f);
affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();
Dieser Effekt führt diesen Matrixvorgang aus:
Obwohl die Eingabematrix als 3x2-Matrix definiert ist, wird die letzte Spalte mit 0, 0 und 1 aufgefüllt, um eine quadratische Matrix zu erzeugen. Dies ermöglicht die Matrixmultiplikation, sodass Transformationen in eine einzelne Matrix verkettet werden können.
Effekteigenschaften
Anzeigename und Indexenumeration | Beschreibung |
---|---|
Interpolationmode D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE |
Der Interpolationsmodus, der zum Skalieren des Bilds verwendet wird. Es gibt 6 Skalierungsmodi, die in Qualität und Geschwindigkeit reichen. Typ ist D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE. Der Standardwert ist D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE |
Der Modus, der zum Berechnen des Rahmens des Bilds verwendet wird, weich oder hart. Weitere Informationen finden Sie unter Rahmenmodi. Typ ist D2D1_BORDER_MODE. Der Standardwert ist D2D1_BORDER_MODE_SOFT. |
TransformMatrix D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX |
Die 3x2-Matrix zum Transformieren des Bilds mithilfe der Direct2D-Matrixtransformation. Typ ist D2D1_MATRIX_3X2_F. Der Standardwert ist Matrix3x2F::Identity(). |
Schärfe D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS |
Im qualitativ hochwertigen kubischen Interpolationsmodus wird die Schärfe des Skalierungsfilters als Gleitkomma zwischen 0 und 1 festgelegt. Die Werte sind ohne Einheit. Sie können die Schärfe verwenden, um die Qualität eines Bilds anzupassen, wenn Sie das Bild skalieren. Der Schärfefaktor wirkt sich auf die Form des Kernels aus. Je höher der Schärfefaktor, desto kleiner der Kernel. Hinweis: Diese Eigenschaft wirkt sich nur auf den qualitativ hochwertigen kubischen Interpolationsmodus aus. Typ ist FLOAT. Der Standardwert ist 0.0f. |
Rahmenmodi
Name | Beschreibung |
---|---|
D2D1_BORDER_MODE_SOFT | Der Effekt füllt das Bild während der Interpolation mit transparenten schwarzen Pixeln auf, was zu einer weichen Kante führt. |
D2D1_BORDER_MODE_HARD | Durch diesen Effekt wird die Ausgabe auf die Größe des Eingabebildes festgelegt. |
Interpolationsmodi
Enumeration | Beschreibung |
---|---|
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR | Verwendet ein Beispiel mit vier Punkten und eine lineare Interpolation. Dieser Modus verwendet mehr Verarbeitungszeit als der Pixelwiederholungsmodus, gibt jedoch ein Bild mit höherer Qualität aus. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Verwendet die anisotrope Filterung, um ein Muster gemäß der transformierten Form der Bitmap zu erfassen. |
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR festgelegt.
Hinweis
Im anisotropen Modus werden Mipmaps beim Skalieren generiert. Wenn Sie die Zwischengespeicherte Eigenschaft jedoch auf „true“ für die Effekte festlegen, die für diesen Effekt eingegeben werden, werden die Mipmaps nicht jedes Mal für ausreichend kleine Bilder generiert.
Ausgabebitmap
Die Größe der Ausgabebitmap hängt von der Transformationsmatrix ab, die auf das Bild angewendet wird.
Der Effekt führt den Transformationsvorgang aus und wendet dann einen Begrenzungsrahmen um das Ergebnis an. Die Ausgabebitmap ist die Größe des Begrenzungsrahmens.
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 |