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
- Effect-Eigenschaften
- Rahmenmodi
- Interpolationsmodi
- Ausgabebitmap
- Anforderungen
- Zugehörige Themen
Beispielbild
| Vorher |
|---|
![]() |
| Nach |
![]() |
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 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] 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 |

