我在 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
方法Graphics
(此处为 MSDN)来做同样的事情 - 所以如上所述构建您的点数组,然后执行以下操作:
g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, pPoints);
MSDN描述了上述函数中使用的相关坐标空间:
GDI+ 使用三个坐标空间:世界、页面和设备。世界坐标是用于对特定图形世界建模的坐标,并且是您传递给 .NET Framework 中的方法的坐标。页面坐标是指绘图表面(如窗体或控件)使用的坐标系。设备坐标是被绘制的物理设备所使用的坐标,例如屏幕或打印机。Transform 属性表示世界变换,它将世界坐标映射到页面坐标。