18-图像的几何变换
20.3.3 图像的几何变换
GDI+提供的TranslateTransform、RotateTransform()和ScaleTransform()方法可以实现图像的平移、旋转和缩放等简单的几何变换。
1.TranslateTransform方法
该方法用于平移坐标系统的原点,常用语法格式为:
public void TanslateTransform(float dx,float dy)
参数dx和dy分别表示平移的水平和垂直距离。
2.RotateTransform方法
该方法用于将整个坐标系统旋转指定的角度,常用语法格式为:
public void RotateTransform(float angle)
参数angle表示沿顺时针方向旋转的角度。
3.ScaleTransform方法
该方法用于将整个坐标系按指定的x分量和y分量按比例进行缩放。常用的语法格式为:
public void ScaleTransform(float sx,float sy)
参数sx和sy分别表示水平和垂直方向缩放的比例。
下面利用上面介绍的3种方法分别对一个打开的图片进行移动、旋转和缩放操作。程序运行效果如下图所示。
程序源代码如下。
01 public enum ImageChange
02 {
03 Open = 0, // 打开图片
04 Move = 1, // 移动图片
05 Rotate = 2, // 旋转图片
06 Zoom = 3, // 缩放图片
07 Clear=4, //清除图片
08 }
09 ImageChange imgChange =ImageChange.Clear;
10 Bitmap bitmap = null;
11 private void btnOpenFile_Click(object sender, EventArgs e)
12 {
13 OpenFileDialog openFileDialog = new OpenFileDialog();
14 openFileDialog.Filter="(*.jpg)|*.JPG|(*.gif)|*.GIF|(*.bmp)|*.BMP|(*.png)|*.PNG|(*.jpeg)|*.JPEG";
15 if (openFileDialog.ShowDialog() == DialogResult.OK)
16 {
17 try
18 {
19 bitmap = new Bitmap(openFileDialog.FileName);
20 imgChange = ImageChange.Open;
21 panel1.Refresh();
22 }
23 catch (Exception ex)
24 {
25 MessageBox.Show("图片格式不正确!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
26 }
27 }
28 }
29
30 private void btnMove_Click(object sender, EventArgs e)
31 {
32 imgChange = ImageChange.Move;
33 panel1.Refresh();
34 }
35
36 private void btnRotate_Click(object sender, EventArgs e)
37 {
38 imgChange = ImageChange.Rotate;
39 panel1.Refresh();
40 }
41
42 private void button1_Click(object sender, EventArgs e)
43 {
44 imgChange = ImageChange.Zoom;
45 panel1.Refresh();
46 }
47 private void panel1_Paint(object sender, PaintEventArgs e)
48 {
49 Graphics g = panel1.CreateGraphics();
50 switch (imgChange)
51 {
52 case ImageChange.Open:
53 g.DrawImage(bitmap, 10, 10);
54 break;
55 case ImageChange.Move:
56 g.TranslateTransform(300, 0);
57 g.DrawImage(bitmap, 10, 10);
58 break;
59 case ImageChange.Rotate:
60 g.RotateTransform(30);
61 g.DrawImage(bitmap,100, 10);
62 break;
63 case ImageChange.Zoom:
64 g.DrawImage(bitmap, 10, 10);
65 g.TranslateTransform(400, 0);
66 g.ScaleTransform(0.5f, 0.5f);
67 g.DrawImage(bitmap, 10, 10);
68 break;
69 default:
70 g.Clear(Color.White);
71 break;
72 }
73 g.ResetTransform();
74 }