Поделиться через


Масштабирование объекта

В этом разделе описывается масштабирование объекта с помощью класса Matrix3x2F . Масштабирование объекта означает увеличение или уменьшение размера объекта. Для масштабирования объекта можно вызвать один из следующих двух методов.

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

Первый метод сохраняет scalex и scaley в виде упорядоченной пары значений с плавающей запятой в структуре D2D1_SIZE_F . Второй метод определяет scalex и scaley как отдельные параметры.

Независимо от используемого метода необходимо указать коэффициенты масштабирования и коэффициенты масштабирования . Значение scalex — это коэффициент масштабирования в направлении x. Например, значение scalex 1,5 растягивает объект на 150 процентов вдоль оси X. Аналогичным образом, масштабируемое значение является коэффициентом масштабирования в направлении y. Например, масштабируемое значение 0,5 уменьшает высоту объекта на 50 процентов по оси Y.

Чтобы указать точку в качестве центра операции масштабирования, используйте параметр centerpoint . По умолчанию объект находится в центре его источника (0,0).

В следующем примере кода создается преобразование масштаба для увеличения размера квадрата до 130 % от исходного размера. Центральной точкой является верхний левый угол исходного квадрата.

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

На следующем рисунке показан эффект применения преобразования масштаба к квадрату. Исходный квадрат представляет собой пунктирный контур, а масштабированный квадрат — сплошной контур.

иллюстрация квадрата с размером до 130 % от исходного размера

Общие сведения о преобразованиях Direct2D

Справочник по Direct2D