0
我在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)
一旦你已经在你的Graphics
对象设置ScaleTransform
(或任何变换为此事),你可以用它来改变你的矩形的点(或任何其他点)。
例如:
// 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说:
由于矩阵返回,并且由变换特性是 几何副本变换,你应该处理矩阵,当你没有 更需要它。
作为一个略少罗嗦替代方法,可以使用Graphics
类的TransformPoints
方法(MSDN here)做同样的事情 - 这样构建如上贵点阵列,那么就这样做:
g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, pPoints);
MSDN描述了上述功能中使用的相关的坐标空间:
GDI +使用三个坐标空间:世界,页面和设备。世界 坐标是用于建模特定图形的坐标,并且是您传递给.NET Framework中方法的坐标。页面坐标指的是一个 绘图表面使用的坐标系统,例如窗体或控件。设备坐标是要绘制的物理设备使用的坐标,如 屏幕或打印机。 Transform属性表示将世界坐标映射到页面坐标的世界 转换。
非常感谢Roger.You帮助了我很多,现在它可以工作!我希望我有足够的声望来投票您的答案。 :) – evanchai