Udostępnij przez


Jak skalować obiekt

W tym temacie opisano sposób skalowania obiektu przy użyciu klasy Matrix3x2F. Skalowanie obiektu oznacza, że obiekt jest większy lub mniejszy. W celu skalowania obiektu można wywołać jedną z następujących dwóch metod.

  • Matrix3x2F::Scale(D2D1_SIZE_F scalefactor, D2D1_POINT_2F centerpoint)
  • Matrix3x2F::Scale(float scalex, float scaley, D2D1_POINT_2F centerpoint)

Pierwsza metoda przechowuje scalex i scaley jako uporządkowaną parę wartości zmiennoprzecinkowych w strukturze D2D1_SIZE_F. Druga metoda definiuje scalex i scaley jako poszczególne parametry.

Niezależnie od metody, której używasz, należy określić zarówno czynnik scalex, jak i czynnik scaley. Wartość scalex jest współczynnikiem skalowania w osi x. Na przykład wartość scalex 1,5 rozciąga obiekt na 150 procent wzdłuż osi x. Podobnie wartość skalowania jest czynnikiem skalowania w kierunku y. Na przykład skalowalna wartość o 0,5 zmniejsza wysokość obiektu o 50 procent wzdłuż osi y.

Aby określić punkt jako środek operacji skalowania, użyj parametru centerpoint. Domyślnie obiekt jest wyśrodkowany wokół swojej osi początkowej (0,0).

Poniższy przykładowy kod tworzy transformację skalowania w celu zwiększenia rozmiaru kwadratu do 130% oryginalnego rozmiaru. środkowy punkt jest ustawiony na lewy górny róg oryginalnego kwadratu.

    // 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);

Na poniższej ilustracji przedstawiono efekt zastosowania przekształcenia skali na kwadracie. Oryginalny kwadrat jest konturem kropkowanym, a skalowany kwadrat jest solidnym konturem.

ilustracja rozmiaru kwadratu została zmieniona na 130% rozmiaru oryginalnego

Przegląd Przekształceń Direct2D

Dokumentacja Direct2D