Freigeben über


2D-affine Transformationseffekt

Der 2D-affine Transformationseffekt wendet eine räumliche Transformation auf ein Bild basierend auf einer 3X2-Matrix mithilfe der Direct2D-Matrix Transformation 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

Vor
das Bild vor dem Effekt.
Nach
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-Matrix Transformation.
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 Die Effektpads des Bilds werden mit transparenten schwarzen Pixeln interpoliert, was zu einem weichen Rand führt.
D2D1_BORDER_MODE_HARD Der Effekt klemmt die Ausgabe an die Größe des Eingabebilds.

Interpolationsmodi

Aufzählung Beschreibung
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR Verwendet ein Beispiel mit vier Punkten und eine lineare Interpolation. Dieser Modus verwendet mehr Verarbeitungszeit als der nächste Nachbarmodus, gibt jedoch ein Bild mit höherer Qualität aus.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_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_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Verwendet die anisotrope Filterung, um ein Muster gemäß der transformierten Form der Bitmap zu probieren.
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 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_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR festgelegt.

Anmerkung

Der anisotrope Modus generiert jedoch Mipmaps beim Skalieren, wenn Sie die Zwischengespeicherte-Eigenschaft 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 ein umgebendes Feld um das Ergebnis an. Die Ausgabebitmap ist die Größe des umgebenden Felds.

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-