变换有:缩放、平移、旋转以及错位变换。(通用坐标系下)
用于变换的方法如下:
缩放变换:
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
g.DrawRectangle(Pens.Black, 10, 10, 50, 50);
g.DrawEllipse(Pens.Black, 10, 10, 10, 10);
g.ScaleTransform(2.0f, 3.0f);
g.DrawRectangle(Pens.Black, 10, 10, 50, 50);
g.DrawEllipse(Pens.Black, 10, 10, 10, 10);
如图:
X方向扩大了两倍,Y方向扩大了三倍。同事笔画宽度也在方向上进行了扩大。
平移变换:
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
for (int i = 1; i <= 5; ++i)
{
g.DrawRectangle(Pens.Black, 20, 20, 60, 100);
g.TranslateTransform(4, 20);
}
如图:
每次都向X方向移动4,向Y方向移动20个像素。这个变换是积累的。如果想要非积累的,使用ResetTransform方法。
旋转变换:
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
Font f = new Font("Times New Roman", 16);
for (float angle = 0; angle < 360; angle += 45)
{
g.ResetTransform();
g.TranslateTransform(ClientRectangle.Width / 2, ClientRectangle.Height / 2);
g.RotateTransform(angle);
g.DrawString("Hello,World", f, Brushes.Black, 50, 0);
}
如图:
错位变换:
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, ClientRectangle);
Matrix m = new Matrix();
m.Shear(0.6f, 0);
g.DrawRectangle(Pens.Black, 10, 10, 50, 50);
g.MultiplyTransform(m);
g.DrawRectangle(Pens.Black, 70, 10, 50, 50);
如图:
这个是由矩阵来的,比较麻烦。