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


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

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

  • Matrix3x2F::Масштабирование(D2D1_SIZE_F коэффициентмасштаба, D2D1_POINT_2F точкацентра)
  • Matrix3x2F::Scale(float scalex, float scaley, D2D1_POINT_2F centerpoint)

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

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

Чтобы указать точку в качестве центра операции масштабирования, используйте параметр центр. По умолчанию объект находится в центре своего происхождения (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