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)
4

1 回答 1

3

一旦你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 属性表示世界变换,它将世界坐标映射到页面坐标。

于 2013-12-17T08:38:50.647 回答