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 einem von sechs Interpolationsmodi an. Sie können diesen Effekt verwenden, um ein Bild zu drehen, zu skalieren, zu verskalieren oder zu übersetzen. Sie können diese Vorgänge auch kombinieren. Affine Übertragungen behalten parallele Linien und das Verhältnis der Abstände zwischen drei beliebigen Punkten in einem Bild bei.

Die CLSID für diesen Effekt ist CLSID _ D2D12DAffineTransform.

Beispielbild

Vorher
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 aufschlossen, um eine quadratische Matrix zu erzeugen. Dies ermöglicht eine Matrixmultiplikation, sodass Transformationen zu einer einzelnen Matrix verkettet werden können.

Effect-Eigenschaften

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 verwendet wird, um den Rahmen des Bilds zu berechnen, soft oder hard. 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 kubischen Interpolationsmodus mit hoher Qualität wird die Schärfe des Skalierungsfilters als Gleitkomma zwischen 0 und 1 angezeigt. Die Werte sind einheitslos. 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.
[!Note]
Diese Eigenschaft wirkt sich nur auf den kubischen Interpolationsmodus mit hoher Qualität aus.

Typ: FLOAT
Der Standardwert ist 1,0f.

Rahmenmodi

Name BESCHREIBUNG
D2D1 _ BORDER _ MODE _ SOFT Der Effekt auflagert das Bild bei der Interpolation mit transparenten schwarzen Pixeln, was zu einem weichen Rand führt.
D2D1– _ _ RAHMENMODUS _ FEST Der Effekt klammert die Ausgabe an die Größe des Eingabebilds.

Interpolationsmodi

Enumeration Beschreibung
D2D1 _ 2DAFFINETRANSFORM _ _ INTERPOLATIONSMODUS _ NÄCHSTER _ NACHBAR Stichprobenentnahme für den nächstgelegenen einzelnen Punkt und Verwendung dieses Punkts. Dieser Modus verbraucht weniger Verarbeitungszeit, gibt jedoch das Image mit der niedrigsten Qualität aus.
D2D1 _ 2DAFFINETRANSFORM _ _ INTERPOLATIONSMODUS _ LINEAR Verwendet eine Stichprobe mit vier Punkt 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 _ _ INTERPOLATIONSMODUS _ KUBISCH Verwendet einen kubischen 16-Beispielkernel für die Interpolation. Dieser Modus verwendet die meiste Verarbeitungszeit, gibt jedoch ein Image mit höherer Qualität aus.
D2D1 _ 2DAFFINETRANSFORM _ INTERPOLATION _ MODE _ MULTI _ SAMPLE _ LINEAR Verwendet vier lineare Stichproben innerhalb eines einzelnen Pixels für ein gutes Edge-Antialiasing. Dieser Modus ist gut für das herunterskalieren um kleine Mengen auf Bildern mit wenigen Pixeln.
D2D1 _ 2DAFFINETRANSFORM _ _ INTERPOLATIONSMODUS _ ANISOTROP Verwendet die anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap zu beproben.
D2D1 _ 2DAFFINETRANSFORM _ INTERPOLATION _ MODE HIGH _ _ QUALITY _ KUBISCH Verwendet einen kubischen Kernel mit hoher Qualität in variabler Größe, um ein Vorabskalieren des Images durchzuführen, wenn eine Downskalierung an der Transformationsmatrix beteiligt ist. 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 bei der Skalierung Mipmaps generiert. Wenn Sie jedoch die Cached-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 Begrenzungsfeld um das Ergebnis an. Die Ausgabebitmap ist die Größe des Begrenzungsfelds.

Requirements (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