グローバル変換とローカル変換Global and Local Transformations

グローバル変換によって描画されたすべての項目に適用される変換とは、指定されたGraphicsオブジェクト。A global transformation is a transformation that applies to every item drawn by a given Graphics object. これに対し、ローカルの変換は、描画する特定の項目に適用される変換です。In contrast, a local transformation is a transformation that applies to a specific item to be drawn.

グローバル変換Global Transformations

グローバル変換を作成するには、構築、Graphicsオブジェクト、および操作し、そのTransformプロパティです。To create a global transformation, construct a Graphics object, and then manipulate its Transform property. Transformプロパティは、Matrixオブジェクト、アフィン変換の任意のシーケンスを保持できるようにします。The Transform property is a Matrix object, so it can hold any sequence of affine transformations. 格納されている、変換、Transformプロパティはワールド変換と呼ばれます。The transformation stored in the Transform property is called the world transformation. Graphicsクラス複合のワールド変換を作成するためのいくつかのメソッドを提供します。 MultiplyTransformRotateTransformScaleTransform、およびTranslateTransformです。The Graphics class provides several methods for building up a composite world transformation: MultiplyTransform, RotateTransform, ScaleTransform, and TranslateTransform. 次の例は 2 回楕円を描画: ワールド変換と後に 1 回作成する前に一度だけです。The following example draws an ellipse twice: once before creating a world transformation and once after. 変換は 0.5 の y 方向のスケーリング 50 単位の x 方向の平行移動し、30 度を回転します。The transformation first scales by a factor of 0.5 in the y direction, then translates 50 units in the x direction, and then rotates 30 degrees.

myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.ScaleTransform(1, 0.5f);
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append);
myGraphics.RotateTransform(30, MatrixOrder.Append);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)
myGraphics.ScaleTransform(1, 0.5F)
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append)
myGraphics.RotateTransform(30, MatrixOrder.Append)
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)

次の図は、変換に関係する、マトリックスを示します。The following illustration shows the matrices involved in the transformation.

変換Transformations

注意

上記の例では、クライアント領域の左上隅にある座標系の原点を基点楕円を回転します。In the preceding example, the ellipse is rotated about the origin of the coordinate system, which is at the upper-left corner of the client area. これには、回転の中心楕円異なる結果が生成されます。This produces a different result than rotating the ellipse about its own center.

ローカル変換Local Transformations

描画する特定の項目にローカルの変換が適用されます。A local transformation applies to a specific item to be drawn. たとえば、GraphicsPathオブジェクトには、Transformメソッドを使用すると、そのパスのデータ ポイントに変換します。For example, a GraphicsPath object has a Transform method that allows you to transform the data points of that path. 次の例では、変換なしを含む四角形と回転変換を使用したパスを描画します。The following example draws a rectangle with no transformation and a path with a rotation transformation. (ワールド変換がないことを想定)。(Assume that there is no world transformation.)

Matrix myMatrix = new Matrix();
myMatrix.Rotate(45);
myGraphicsPath.Transform(myMatrix);
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);
myGraphics.DrawPath(myPen, myGraphicsPath);
Dim myMatrix As New Matrix()
myMatrix.Rotate(45)
myGraphicsPath.Transform(myMatrix)
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50)
myGraphics.DrawPath(myPen, myGraphicsPath)

ワールド変換と、さまざまな結果を実現するためにローカルの変換を組み合わせることができます。You can combine the world transformation with local transformations to achieve a variety of results. たとえば、座標系を変更して、ローカルの変換を使用して回転新しい座標系で描画されるオブジェクトを拡大/縮小するワールド変換を使用することができます。For example, you can use the world transformation to revise the coordinate system and use local transformations to rotate and scale objects drawn on the new coordinate system.

クライアント領域の左端から配信元の 200 ピクセルとクライアント領域の上部から 150 ピクセルを持つ座標系たいとします。Suppose you want a coordinate system that has its origin 200 pixels from the left edge of the client area and 150 pixels from the top of the client area. さらに、ピクセル、権限、および上向きの y 軸を指している x 軸に単位にすることを想定しています。Furthermore, assume that you want the unit of measure to be the pixel, with the x-axis pointing to the right and the y-axis pointing up. 既定の座標システムでは、水平軸に沿って、リフレクションを実行する必要があります、下向き、y 軸があります。The default coordinate system has the y-axis pointing down, so you need to perform a reflection across the horizontal axis. 次の図は、このようなリフレクションのマトリックスを示します。The following illustration shows the matrix of such a reflection.

変換Transformations

次に、右側に翻訳 200 単位と 150 の単位を実行する必要があると仮定します。Next, assume you need to perform a translation 200 units to the right and 150 units down.

次の例は、上記で説明したのワールド変換を設定して、座標系を確立、Graphicsオブジェクト。The following example establishes the coordinate system just described by setting the world transformation of a Graphics object.

Matrix myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
myGraphics.Transform = myMatrix;
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);
Dim myMatrix As New Matrix(1, 0, 0, -1, 0, 0)
myGraphics.Transform = myMatrix
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append)

(前の例の最後に配置)、次のコードでは、新しい座標系の原点の左下隅で 1 つの四角形で構成されるパスを作成します。The following code (placed at the end of the preceding example) creates a path that consists of a single rectangle with its lower-left corner at the origin of the new coordinate system. 四角形は、ローカルの変換なしで 1 回、および変換をローカルに 1 回入力されます。The rectangle is filled once with no local transformation and once with a local transformation. ローカルの変換係数 30 ° 回転を続けて 2 で水平方向のスケーリングで構成されます。The local transformation consists of a horizontal scaling by a factor of 2 followed by a 30-degree rotation.

// Create the path.
GraphicsPath myGraphicsPath = new GraphicsPath();
Rectangle myRectangle = new Rectangle(0, 0, 60, 60);
myGraphicsPath.AddRectangle(myRectangle);

// Fill the path on the new coordinate system.
// No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath);

// Set the local transformation of the GraphicsPath object.
Matrix myPathMatrix = new Matrix();
myPathMatrix.Scale(2, 1);
myPathMatrix.Rotate(30, MatrixOrder.Append);
myGraphicsPath.Transform(myPathMatrix);

// Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath);
' Create the path.
Dim myGraphicsPath As New GraphicsPath()
Dim myRectangle As New Rectangle(0, 0, 60, 60)
myGraphicsPath.AddRectangle(myRectangle)

' Fill the path on the new coordinate system.
' No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath)

' Set the local transformation of the GraphicsPath object.
Dim myPathMatrix As New Matrix()
myPathMatrix.Scale(2, 1)
myPathMatrix.Rotate(30, MatrixOrder.Append)
myGraphicsPath.Transform(myPathMatrix)

' Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath)

次の図は、新しい座標系と 2 つの四角形を示します。The following illustration shows the new coordinate system and the two rectangles.

変換Transformations

関連項目See Also

座標系と変換Coordinate Systems and Transformations
マネージ GDI+ での変換の使用Using Transformations in Managed GDI+