Skalieren eines Objekts

In diesem Thema wird beschrieben, wie Ein Objekt mithilfe der Matrix3x2F-Klasse skaliert wird. Wenn Sie ein Objekt skalieren möchten, müssen Sie das Objekt vergrößern oder verkleineren. Sie können eine der beiden folgenden Methoden aufrufen, um ein Objekt zu skalieren.

  • Matrix3x2F::Scale(D2D1_SIZE_F Scalefactor, D2D1_POINT_2F Mittelpunkt)
  • Matrix3x2F::Scale(float scalex, float scaley, D2D1_POINT_2F Mittelpunkt)

Die erste Methode speichert scalex und scaley als geordnetes Paar von Gleitkommawerten in der D2D1_SIZE_F-Struktur . Die zweite Methode definiert scalex und scaley als einzelne Parameter.

Unabhängig davon, welche Methode Sie verwenden, müssen Sie sowohl Scalex - als auch Skalierungsfaktoren angeben. Der Scalex-Wert ist der Skalierungsfaktor in x-Richtung. Ein Scalex-Wert von 1,5 dehnt das Objekt beispielsweise auf 150 Prozent entlang der x-Achse. In ähnlicher Weise ist der Skalierungswert der Skalierungsfaktor in y-Richtung. Ein Skalierungswert von 0,5 verkleinern beispielsweise die Höhe des Objekts entlang der y-Achse um 50 Prozent.

Um einen Punkt als Mittelpunkt des Skalierungsvorgangs anzugeben, verwenden Sie den Centerpoint-Parameter . Standardmäßig ist ein Objekt über seinen Ursprung (0,0) zentriert.

Der folgende Beispielcode erstellt eine Skalierungstransformation, um die Größe eines Quadrats auf 130 % der ursprünglichen Größe zu erhöhen. Der Mittelpunkt wird auf die linke obere Ecke des ursprünglichen Quadrats festgelegt.

    // Create a rectangle.
    D2D1_RECT_F rectangle = D2D1::Rect(438.0f, 80.5f, 498.0f, 140.5f);

    // Draw the outline of the rectangle.
    m_pRenderTarget->DrawRectangle(
        rectangle,
        m_pOriginalShapeBrush,
        1.0f,
        m_pStrokeStyleDash
        );

    // Apply the scale transform to the render target.
    m_pRenderTarget->SetTransform(
        D2D1::Matrix3x2F::Scale(
            D2D1::Size(1.3f, 1.3f),
            D2D1::Point2F(438.0f, 80.5f))
        );

    // Paint the rectangle's interior.
    m_pRenderTarget->FillRectangle(rectangle, m_pFillBrush);

    // Draw the outline of the rectangle.
    m_pRenderTarget->DrawRectangle(rectangle, m_pTransformedShapeBrush);

Die folgende Abbildung zeigt den Effekt des Anwendens der Skalierungstransformation auf das Quadrat. Das ursprüngliche Quadrat ist ein gepunkteter Umriss, und das skalierte Quadrat ist ein durchgezogener Umriss.

Abbildung der Quadratgröße auf 130 % der ursprünglichen Größe geändert

Übersicht über Direct2D-Transformationen

Direct2D-Referenz