1. 程式人生 > >C# 如何在影象上做(矩形/圓)標記

C# 如何在影象上做(矩形/圓)標記

手動畫圓或橢圓

  1. private Point startPoint;  
  2.     private bool beginDragging;  
  3.     public Form1()  
  4.     {  
  5.         InitializeComponent();  
  6.         this.DoubleBuffered = true;     
  7.     }  
  8.     private void Form1_MouseMove(object sender, MouseEventArgs e)  
  9.     {  
  10.         if (e.Button == MouseButtons.Left && beginDragging)  
  11.         {  
  12.             circle.Size = new Size(circle.Size.Width + e.X - startPoint.X, circle.Size.Height + e.Y - startPoint.Y);  
  13.             startPoint = new Point(e.X, e.Y);  
  14.         }  
  15.         this.Invalidate();  
  16.     }  
  17.     private void Form1_MouseDown(object sender, MouseEventArgs e)  
  18.     {  
  19.         if (e.Button
     == MouseButtons.Left)  
  20.         {  
  21.             startPoint = e.Location;  
  22.             beginDragging = true;  
  23.             this.Capture = true;  
  24.             circle = new Circle();  
  25.             circle.Location = e.Location;  
  26.             Circles.Add(circle);  
  27.             this.Cursor = System.Windows.Forms.Cursors.Cross;  
  28.         }  
  29.     }  
  30.     private void Form1_MouseUp(object sender, MouseEventArgs e)  
  31.     {  
  32.         if (e.Button == MouseButtons.Left && beginDragging)  
  33.         {  
  34.             beginDragging = false;  
  35.             this.Capture = false;  
  36.             this.Cursor = System.Windows.Forms.Cursors.Default;  
  37.         }  
  38.         this.Invalidate();  
  39.     }  
  40.     private void Form1_Paint(object sender, PaintEventArgs e)  
  41.     {  
  42.         Graphics g = e.Graphics;  
  43.         foreach (Circle each in Circles)  
  44.         {  
  45.             g.DrawEllipse(Pens.Black, new Rectangle(each.Location, each.Size));  
  46.         }  
  47.     }  
  48.     private List<Circle> Circles = new List<Circle>();  
  49.     private Circle circle = new Circle();  
  50. public class Circle  
  51. {  
  52.     public int Radii;  
  53.     public Size Size;  
  54.     public Point Location;  
  55. }  

自動畫圓

  1. //方法1  
  2.         private void button1_Click_1(object sender, EventArgs e)  
  3.         {  
  4.             Image im = new Bitmap(this.panel2.Width, this.panel2.Height);  
  5.             Graphics g = Graphics.FromImage(im);  
  6.             GraphicsPath gp = new GraphicsPath();  
  7.             Rectangle rec = new Rectangle(0, 0, 100, 100);  
  8.             gp.AddEllipse(rec);  
  9.             g.DrawEllipse(new Pen(Color.Red), rec);  
  10.             this.panel2.BackgroundImageLayout = ImageLayout.Stretch;  
  11.             this.panel2.BackgroundImage = im;  
  12.         }  
  13. //方法2  
  14.         private void button3_Click(object sender, EventArgs e)  
  15.         {  
  16.             Graphics gra;  
  17.             Brush bush;  
  18.             gra = this.panel3.CreateGraphics();  
  19.             bush = new SolidBrush(Color.Red); //填充的顏色  
  20.             gra.FillEllipse(bush, 0, 0, 100, 100);//畫填充橢圓的方法,x座標、y座標、寬、高,如果是100,則半徑為50    
  21.         } 

自動畫矩形

  1. //方法1  
  2.        private void button2_Click(object sender, EventArgs e)  
  3.        {  
  4.            Image im = new Bitmap(this.panel1.Width,this.panel1.Height);  
  5.            Graphics g = Graphics.FromImage(im);  
  6.            GraphicsPath gp = new GraphicsPath();  
  7.            Rectangle rec = new Rectangle(new Point(0,0),new Size(100,100));  
  8.            gp.AddRectangle(rec);  
  9.            g.DrawRectangle(new Pen(Color.Red), rec);  
  10.            this.panel1.BackgroundImageLayout = ImageLayout.Stretch;  
  11.            this.panel1.BackgroundImage = im;  
  12.        }  
  13. //方法2  
  14.        private void button4_Click(object sender, EventArgs e)  
  15.        {  
  16.            Graphics gra;  
  17.            Brush bush;  
  18.            gra = this.panel4.CreateGraphics();  
  19.            bush = new SolidBrush(Color.Red);  
  20.            gra.DrawRectangle(new Pen(bush,20), 0, 0, 100, 100);  
  21.        }