Freigeben über


Transformationen (DirectComposition)

Hinweis

Für Apps unter Windows 10 empfehlen wir die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App über die visuelle Ebene.

In diesem Thema wird die Unterstützung von zweidimensionalen (2D) affinen (linearen) Transformationen durch Microsoft DirectComposition erörtert und die von DirectComposition unterstützten Transformationstypen beschrieben.

DirectComposition unterstützt auch 3D-Perspektivtransformationen, aber da diese die Erstellung einer Bitmap-Zwischenstufe erfordern, betrachtet DirectComposition sie eher als Effekte denn als Transformationen. Informationen zu 3D-Perspektiventransformationseffekten finden Sie unter Effekte.

Dieses Thema enthält die folgenden Abschnitte:

Was ist eine DirectComposition 2D-Transformation?

Eine 2D-Transformation ermöglicht es Ihnen, die Position, Größe oder Art eines visuellen Elements in zwei Dimensionen zu ändern, indem Sie das Bild an eine andere Stelle verschieben (Verschiebung), es vergrößern oder verkleinern (Skalierung), es drehen (Drehung) oder seine Form verzerren (Schrägstellung).

Eine 2D-Transformation wird durch Zuordnen der Punkte eines visuellen Elements von einer Position zu einer anderen innerhalb desselben Koordinatenraums oder von einem Koordinatenbereich zu einem anderen erreicht. Diese Zuordnung wird durch eine Wertetabelle beschrieben, die als Transformationsmatrix bezeichnet wird und als eine Sammlung von drei Zeilen mit drei Spalten von Gleitkommawerten definiert ist, wie in der folgenden Tabelle dargestellt.

M11Vorgabe: 1.0
M21Vorgabe: 0.0
M31OffsetX: 0.0

M12Vorgabe: 0.0
M22Vorgabe: 1.0
M32OffsetY: 0.0

0.0
0.0
1.0

Die Transformationsmatrix für affine 2D-Transformationen ist eine 3:2-Matrix, die die dritte Spalte aus der vorherigen Transformationsmatrix weglässt. Die folgende Tabelle zeigt das Layout dieser Matrix.

M11Vorgabe: 1.0
M21Vorgabe: 0.0
M31OffsetX: 0.0

M12Vorgabe: 0.0
M22Vorgabe: 1.0
M32OffsetY: 0.0

Hinweis

DirectComposition führt keine spezielle Verarbeitung durch, wenn 2D-Transformationen auf Stereo-Inhalte angewendet werden. Dies bedeutet, dass der 3D-Inhalt möglicherweise verzerrt angezeigt wird, wenn eine 2D-Transformation darauf angewendet wird.

Der DirectComposition 2D-Koordinatenbereich

DirectComposition verwendet einen linkshändigen 2D-Koordinatenraum, d. h. positive x-Achsenwerte nehmen nach rechts zu und positive y-Achsenwerte nehmen nach unten zu. Visuelle Elemente werden relativ zum Ursprung positioniert, d. h. der Punkt, an dem sich die X-Achse und die Y-Achse (0, 0) überschneiden, wie in der folgenden Abbildung dargestellt.

die X-Achse und die Y-Achse eines linkshändigen Koordinatenbereichs

Durch die Manipulation von Werten in einer 3-mal-2-Transformationsmatrix können Sie ein Objekt in zwei Dimensionen drehen, skalieren, neigen und verschieben. Wenn Sie z. B. OffsetX auf 100 und OffsetY auf 200 festlegen, verschieben Sie das Objekt um 100 Pixel nach rechts und um 200 Pixel nach unten.

Unterstützung für affine 2D-Transformationen

In der folgenden Tabelle werden die Typen affiner 2D-Transformationen beschrieben, die von DirectComposition unterstützt werden, und die Schnittstellen, die Sie zum Ausführen der verschiedenen Arten von Transformationen verwenden können.

Transformation/Schnittstelle Beschreibung Abbildung
Drehen von 2D IDCompositionRotateTransform dreht ein visuelles Element um den angegebenen Winkel um den angegebenen Mittelpunkt. Abbildung eines Quadrats, das um 45 Grad im Uhrzeigersinn um die Mitte des ursprünglichen Quadrats gedreht wurde
Skalieren von 2D IDCompositionScaleTransform skaliert ein visuelles Element um den angegebenen Faktor um den angegebenen Mittelpunkt. Abbildung eines um 130 % skalierten Rechtecks
Neigen von 2D IDCompositionSkewTransform neigt ein visuelles Element durch den angegebenen Winkel entlang der X-Achse und der Y-Achse und um den angegebenen Mittelpunkt. Abbildung einer um 30 Grad geneigten Rechtecks gegen den Uhrzeigersinn von der Y-Achse
Übersetzen von 2D IDCompositionTranslateTransform ändert die Position eines visuellen Elements in Richtung der X-Achse und der Y-Achse. Abbildung eines um 20 Einheiten entlang der positiven x-Achse und 10 Einheiten entlang der positiven Y-Achse verschobenen Rechtecks

2D-Matrixtransformationen

Mit der IDCompositionMatrixTransform-Schnittstelle können Sie Ihre eigene 3-by-2-affine 2D-Transformationsmatrix definieren und auf eine visuelle Matrix anwenden. Diese Schnittstelle ist nützlich, wenn Sie einen Typ affiner 2D-Transformation anwenden müssen, der nicht über die anderen DirectComposition-Transformationsschnittstellen verfügbar ist. Sie definieren die Matrix, indem Sie eine D2D_MATRIX_3X2_F-Struktur und an die IDCompositionMatrixTransform::SetMatrix-Methode übergeben.

Transformationsgruppen

Sie können Transformationsgruppen verwenden, um mehrere Transformationen in einem zu kombinieren. Eine Transformationsgruppe definiert eine Auflistung von Transformationsobjekten, deren Matrizen in der Reihenfolge multipliziert werden, in der sie in der Auflistung angegeben werden. Die resultierende Transformationsmatrix wird dann auf das visuelle Element angewendet. Eine Transformationsgruppe erzeugt dasselbe Ergebnis wie die Anwendung jeder Transformation separat.

Beachten Sie, dass die Reihenfolge der Transformationsobjekte in einer Transformationsgruppe wichtig ist. Wenn ein visuelles Element z. B. zuerst gedreht, dann skaliert und dann verschoben wird, unterscheidet sich das Ergebnis von dem Ergebnis, bei dem das visuelle Element zuerst verschoben, dann gedreht und dann skaliert wird. DirectComposition wendet die Transformationen immer auf ein visuelles Element in der Reihenfolge an, in der sie in der Auflistung angegeben werden.

Um eine Transformationsgruppe zu erstellen, erstellen Sie zuerst die Transformationsobjekte, die Sie in die Gruppe aufnehmen möchten, und übergeben dann ein Array von Transformationsobjektzeigern an die IDCompositionDevice::CreateTransformGroup-Methode. Nachdem Sie eine Transformationsgruppe erstellt haben, können Sie keine Transformationsobjekte hinzufügen oder entfernen. Sie können jedoch die Eigenschaften der einzelnen Transformationsobjekte in der Auflistung ändern, und die Änderungen werden in der resultierenden Transformationsmatrix angezeigt.

Transformationsanimation

Die Eigenschaften einer Transformation können animiert werden. Wenn eine Eigenschaft animiert wird, ändert DirectComposition den Wert der Eigenschaft im Laufe der Zeit und nicht alle gleichzeitig. Dies ist besonders hilfreich beim Erstellen von Übergängen. Weitere Informationen finden Sie unter Animation.