Share via


Transformationen (DirectComposition)

Hinweis

Für Apps auf Windows 10 wird die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition empfohlen. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.

In diesem Thema wird die Microsoft DirectComposition-Unterstützung für zweidimensionale (2D) affine (lineare) Transformationen erläutert und die Typen von Transformationen beschrieben, die Von DirectComposition unterstützt werden.

DirectComposition unterstützt auch 3D-Perspektivtransformationen, da sie jedoch die Erstellung einer zwischengeschalteten Bitmap erfordern, betrachtet DirectComposition sie als Effekte und nicht als Transformationen. Informationen zu 3D-Perspektivtransformationseffekten finden Sie unter Effekte.

Dieses Thema enthält die folgenden Abschnitte:

Was ist eine DirectComposition 2D-Transformation?

Mit einer 2D-Transformation können Sie die Position, Größe oder Natur eines Visuals in zwei Dimensionen ändern, indem Sie das Visual an eine andere Stelle verschieben (Übersetzung), es größer oder kleiner macht (Skalieren), es drehen (Drehung) oder seine Form verzerrt (Skewing).

Eine 2D-Transformation wird erreicht, indem die Punkte eines Visuals von einer Position zu einer anderen innerhalb desselben Koordinatenraums oder von einem Koordinatenraum zu einem anderen zugeordnet werden. Diese Zuordnung wird durch eine Tabelle mit Werten beschrieben, die als Transformationsmatrix bezeichnet wird, die als Auflistung von drei Zeilen mit drei Spalten mit Gleitkommawerten definiert ist, wie in der folgenden Tabelle dargestellt.

M11Default: 1.0
M21Default: 0,0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0,0

0.0
0.0
1.0

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

M11Default: 1.0
M21Default: 0,0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0,0

Hinweis

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

 

Der DirectComposition-2D-Koordinatenraum

DirectComposition verwendet einen linkshändigen 2D-Koordinatenraum; Das heißt, positive x-Achsenwerte erhöhen sich nach rechts und positive y-Achsenwerte nach unten. Visuals werden relativ zum Ursprung positioniert, d. h. dem Punkt, an dem sich die x- und y-Achse überschneiden (0, 0), wie in der folgenden Abbildung gezeigt.

die x- und y-Achse eines linkshändigen Koordinatenraums

Durch Bearbeiten von Werten in einer 3-by-2-Transformationsmatrix können Sie ein Objekt in zwei Dimensionen rotieren, skalieren, verkleinen und übersetzen. Wenn Sie beispielsweise OffsetX auf 100 und OffsetY auf 200 festlegen, verschieben Sie das Objekt auf die rechten 100 Pixel und nach unten um 200 Pixel.

Unterstützung für affine 2D-Transformationen

Die folgende Tabelle beschreibt die Typen von affinen 2D-Transformationen, die von DirectComposition unterstützt werden, und listet die Schnittstellen auf, die Sie zum Ausführen der verschiedenen Transformationstypen verwenden können.

Transformieren/Schnittstelle BESCHREIBUNG Abbildung
Rotieren von 2Didcompositionrotatetransform[newline] Drehen Sie ein Visual um den angegebenen Winkel um den angegebenen Mittelpunkt. Abbildung eines um 45 Grad im Uhrzeigersinn gedrehten Quadrats um die Mitte des ursprünglichen Quadrats
Skalieren von 2Didcompositionscaletransform[newline] skalieren Sie ein Visual um den angegebenen Faktor für den angegebenen Mittelpunkt. Abbildung eines quadratischen Maßstabs von 130 Prozent
Skew 2Didcompositionskewtransform[newline] ein Visual um den angegebenen Winkel entlang der x- und y-Achse und um den angegebenen Mittelpunkt zu verzerren. Abbildung eines quadratischen Schrägen um 30 Grad gegen den Uhrzeigersinn von der y-Achse
Übersetzen von 2Didcompositiontranslatetransform[newline] ändern Sie die Position eines Visuals in Richtung der x- und y-Achse. Abbildung eines Quadrats, das 20 Einheiten entlang der positiven x-Achse und 10 Einheiten entlang der positiven y-Achse bewegt hat

 

Matrix-2D-Transformationen

Mit der IDCompositionMatrixTransform-Schnittstelle können Sie Ihre eigene 3-by-2 affine 2D-Transformationsmatrix definieren und auf ein Visual anwenden. Diese Schnittstelle ist nützlich, wenn Sie einen Typ von 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 füllen und an die IDCompositionMatrixTransform::SetMatrix-Methode übergeben.

Transformieren von Gruppen

Sie können Transformationsgruppen verwenden, um mehrere Transformationen in einer 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 Visual angewendet. Eine Transformationsgruppe erzeugt das gleiche Ergebnis wie das separate Anwenden jeder Transformation.

Beachten Sie, dass die Reihenfolge der Transformationsobjekte in einer Transformationsgruppe wichtig ist. Wenn ein Visual beispielsweise zuerst gedreht, dann skaliert und dann übersetzt wird, unterscheidet sich das Ergebnis von dem, wenn das Visual zuerst übersetzt, dann gedreht und dann skaliert wird. DirectComposition wendet die Transformationen immer 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 einschließen möchten, und übergeben Sie 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 widerspiegelt.

Animation transformieren

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 nützlich beim Erstellen von Übergängen. Weitere Informationen finden Sie unter Animation.

DirectComposition-Konzepte