Compartir a través de


Escalado de un objeto

En este tema se describe cómo escalar un objeto mediante la clase Matrix3x2F . Para escalar un objeto significa hacer que el objeto sea mayor o menor. Puede llamar a uno de los dos métodos siguientes para escalar un objeto.

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

El primer método almacena scalex y scaley como un par ordenado de valores de punto flotante en la estructura D2D1_SIZE_F . El segundo método define scalex y scaley como parámetros individuales.

Independientemente del método que use, debe especificar factores scalex y scaley . El valor scalex es el factor de escala en la dirección x. Por ejemplo, un valor scalex de 1,5 amplía el objeto al 150 por ciento a lo largo del eje X. Del mismo modo, el valor de escalado es el factor de escala en la dirección y. Por ejemplo, un valor de escalado de 0,5 reduce el alto del objeto un 50 por ciento a lo largo del eje Y.

Para especificar un punto como centro de la operación de escalado, use el parámetro centerpoint . De forma predeterminada, un objeto se centra en su origen (0,0).

En el código de ejemplo siguiente se crea una transformación de escala para aumentar el tamaño de un cuadrado al 130 % de su tamaño original. El punto central se establece para que sea la esquina superior izquierda del cuadrado original.

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

En la ilustración siguiente se muestra el efecto de aplicar la transformación de escala al cuadrado. El cuadrado original es un contorno punteado y el cuadrado escalado es un contorno sólido.

ilustración del cuadrado cambiado al 130 % de su tamaño original

Introducción a las transformaciones de Direct2D

Referencia de Direct2D