Come ridimensionare un oggetto

In questo argomento viene descritto come ridimensionare un oggetto usando la classe Matrix3x2F . Per ridimensionare un oggetto significa rendere l'oggetto più grande o più piccolo. È possibile chiamare uno dei due metodi seguenti per ridimensionare un oggetto .

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

Il primo metodo archivia scalex e scaley come coppia ordinata di valori a virgola mobile nella struttura D2D1_SIZE_F . Il secondo metodo definisce scalex e scaley come singoli parametri.

Indipendentemente dal metodo usato, è necessario specificare sia scalex che fattori di scala . Il valore scalex è il fattore di scala nella direzione x. Ad esempio, un valore scalex pari a 1,5 estende l'oggetto al 150% lungo l'asse x. Analogamente, il valore scaley è il fattore di scala nella direzione y. Ad esempio, un valore scalare pari a 0,5 riduce l'altezza dell'oggetto del 50% lungo l'asse y.

Per specificare un punto come centro dell'operazione di ridimensionamento, usare il parametro centerpoint . Per impostazione predefinita, un oggetto è centrato sull'origine (0,0).

Il codice di esempio seguente crea una trasformazione della scala per aumentare le dimensioni di un quadrato al 130% delle dimensioni originali. Il punto centrale è impostato come angolo superiore sinistro del quadrato originale.

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

Nella figura seguente viene illustrato l'effetto dell'applicazione della trasformazione della scala al quadrato. Il quadrato originale è un contorno punteggiato e il quadrato in scala è un contorno solido.

illustrazione del quadrato ridimensionato al 130% delle dimensioni originali

Panoramica delle trasformazioni Direct2D

Informazioni di riferimento su Direct2D