Delen via


Hoe een object schalen

In dit onderwerp wordt beschreven hoe u een object schaalt met behulp van de klasse Matrix3x2F. Als u een object wilt schalen, betekent dit dat het object groter of kleiner wordt. U kunt een van de volgende twee methoden aanroepen om een object te schalen.

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

Met de eerste methode worden scalex en scaley opgeslagen als een geordend paar drijvende-kommawaarden in de D2D1_SIZE_F-structuur. De tweede methode definieert scalex en scaley als afzonderlijke parameters.

Ongeacht welke methode u gebruikt, moet u zowel de scalex- als de scaley- factoren opgeven. De scalex waarde is de schaalfactor in de x-richting. Met een scalex waarde van 1,5 wordt het object bijvoorbeeld uitgerekt tot 150 procent langs de x-as. Op dezelfde manier is de schaalwaarde de schaalfactor in de y-richting. Een schaal waarde van 0,5 verkleint bijvoorbeeld de hoogte van het object met 50 procent langs de y-as.

Als u een punt wilt opgeven als het midden van de schaalbewerking, gebruikt u de parameter centerpoint. Een object is standaard gecentreerd over de oorsprong (0,0).

Met de volgende voorbeeldcode wordt een schaaltransformatie gemaakt om de grootte van een vierkant te vergroten tot 130% van de oorspronkelijke grootte. Het middelpunt is ingesteld op de linkerbovenhoek van het oorspronkelijke vierkant.

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

In de volgende afbeelding ziet u het effect van het toepassen van de schaaltransformatie op het vierkant. Het oorspronkelijke vierkant is een gestippelde omtrek en het geschaalde vierkant is een ononderbroken lijn.

afbeelding van vierkant verkleind tot 130% van zijn oorspronkelijke grootte

Overzicht van Direct2D-transformaties

Direct2D-verwijzing