Mise à l’échelle d’un objet

Cette rubrique explique comment mettre à l’échelle un objet à l’aide de la classe Matrix3x2F . Mettre à l’échelle un objet signifie agrandir ou réduire l’objet. Vous pouvez appeler l’une des deux méthodes suivantes pour mettre à l’échelle un objet.

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

La première méthode stocke scalex et scaley sous la forme d’une paire ordonnée de valeurs à virgule flottante dans la structure D2D1_SIZE_F . La deuxième méthode définit scalex et scaley en tant que paramètres individuels.

Quelle que soit la méthode que vous utilisez, vous devez spécifier des facteurs scalex et scaley . La valeur scalex est le facteur d’échelle dans la direction x. Par exemple, une valeur scalex de 1,5 étire l’objet à 150 % le long de l’axe des X. De même, la valeur de mise à l’échelle est le facteur d’échelle dans le sens y. Par exemple, une valeur de mise à l’échelle de 0,5 réduit la hauteur de l’objet de 50 % le long de l’axe y.

Pour spécifier un point comme centre de l’opération de mise à l’échelle, utilisez le paramètre centerpoint . Par défaut, un objet est centré sur son origine (0,0).

L’exemple de code suivant crée une transformation de mise à l’échelle pour augmenter la taille d’un carré à 130 % de sa taille d’origine. Le point central est défini pour être le coin supérieur gauche du carré d’origine.

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

L’illustration suivante montre l’effet de l’application de la transformation d’échelle au carré. Le carré d’origine est un contour en pointillés et le carré mis à l’échelle est un contour uni.

illustration d’un carré redimensionné à 130 % de sa taille d’origine

Vue d’ensemble des transformations Direct2D

Référence Direct2D