C# の WinFroms アプリケーションで四角形を描画しています。適用後に四角形の実際の座標を取得したいと考えていますScaleTransform
。
Graphics g = e.Graphics;
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append);
g.DrawRectangle(pen, 20, 40, 100,100)
C# の WinFroms アプリケーションで四角形を描画しています。適用後に四角形の実際の座標を取得したいと考えていますScaleTransform
。
Graphics g = e.Graphics;
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append);
g.DrawRectangle(pen, 20, 40, 100,100)
オブジェクト (またはその変換) に を設定したらScaleTransform
、それを使用して四角形のポイント (またはその他のポイント) を変換できます。Graphics
例えば:
// your existing code
Graphics g = e.Graphics;
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append);
// say we have some rectangle ...
Rectangle rcRect = new Rectangle(20, 40, 100, 100);
// make an array of points
Point[] pPoints =
{
new Point(rcRect.Left, rcRect.Top), // top left
new Point(rcRect.Right, rcRect.Top), // top right
new Point(rcRect.Left, rcRect.Bottom), // bottom left
new Point(rcRect.Right, rcRect.Bottom), // bottom right
};
// get a copy of the transformation matrix
using (Matrix mat = g.Transform)
{
// use it to transform the points
mat.TransformPoints(pPoints);
}
上記の構文に注意してくださいusing
-これは、MSDN が言うように、次の理由によるものです。
Transform プロパティによって返される行列は幾何学的変換のコピーであるため、行列が不要になったら破棄する必要があります。
やや冗長な代替手段として、クラスのTransformPoints
メソッド( MSDN here ) を使用して同じことを行うことができます。したがって、上記のようにポイントの配列を作成してから、次のようにします。Graphics
g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, pPoints);
MSDN は、上記の関数で使用される関連する座標空間について説明しています。
GDI+ は、ワールド、ページ、およびデバイスの 3 つの座標空間を使用します。ワールド座標は、特定のグラフィック ワールドをモデル化するために使用される座標であり、.NET Framework のメソッドに渡す座標です。ページ座標は、フォームやコントロールなどの描画面で使用される座標系を指します。デバイス座標は、画面やプリンターなど、描画される物理デバイスで使用される座標です。Transform プロパティは、ワールド座標をページ座標にマップするワールド変換を表します。