オブジェクトをスケーリングする方法

このトピックでは、 Matrix3x2F クラスを使用してオブジェクトをスケーリングする方法について説明します。 オブジェクトをスケーリングするには、オブジェクトを大きくまたは小さくすることを意味します。 次の 2 つのメソッドのいずれかを呼び出して、オブジェクトをスケーリングできます。

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

最初のメソッドは、 scalexscaley を、 D2D1_SIZE_F 構造体の浮動小数点値の順序付きペアとして格納します。 2 番目のメソッドは、 scalexscaley を個々の パラメーターとして定義します。

使用する方法に関係なく、 scalexscaley の両方の要因を 指定する必要があります。 scalex 値は、x 方向のスケール係数です。 たとえば、 scalex 値が 1.5 の場合、オブジェクトは x 軸に沿って 150% に拡大されます。 同様に、 スケール 値は y 方向のスケール係数です。 たとえば、 スケール 値が 0.5 の場合、オブジェクトの高さが y 軸に沿って 50% 縮小されます。

スケーリング操作の中心としてポイントを指定するには、 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 リファレンス