当前位置:嗨网首页>书籍在线阅读

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种方法分别对一个打开的图片进行移动、旋转和缩放操作。程序运行效果如下图所示。

358.png 程序源代码如下。

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  }