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

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

Affine Matrixoperation

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

ID2D1Effect