GDI是图形设备接口的英文Graphics Device Interface缩写,它在Windows中处理所有图形图像的输出。ROI是region of interest的缩写,中文意思就是感兴趣的区域。在机器视觉中应用非常广,这种方式可以大幅度提高效率及灵活性。这篇文章教大家如何在图像中使用C#绘制ROI感兴趣区域,大家可以结合自己的图像实现自己想要的效果。
废话不多说,直接看代码。
绘制矩形
复制
Graphics gra = this.pictureBox1.CreateGraphics(); gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; gra.DrawRectangle(new Pen(Color.Green, Convert.ToInt32(textBox1.Text)), 10,10,100,100);
绘制圆形或椭圆
复制
Graphics gra = this.pictureBox1.CreateGraphics(); gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; gra.DrawEllipse(new Pen(Color.Red, Convert.ToInt32(textBox1.Text)), 10, 150, 100, 100);
绘制扇形
复制
Graphics gra = this.pictureBox1.CreateGraphics(); gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; gra.DrawPie(new Pen(Color.Red, Convert.ToInt32(textBox1.Text)), 150, 10, 100, 100,0,300);
填充图形
都是一样的写法,我就用矩形做个例子。
复制
Graphics gra = this.pictureBox1.CreateGraphics(); gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; gra.FillRectangle(new SolidBrush(Color.GreenYellow), 150, 150, 100, 100);
绘制方法都是以Draw
开头,填充方法都是以Fill
开头。绘制图形第一个参数是Pen
,填充图形第一个参数是SolidBrush
。
使用鼠标绘制矩形
首先定义几个变量
复制
Point start; //画框的起始点 Point end;//画框的结束点 bool blnDraw;//判断是否绘制 System.Drawing.Rectangle rect;//矩形
在pictureBox控件的鼠标按下事件中写下如下代码
复制
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { start = e.Location; Invalidate(); blnDraw = true; }
在pictureBox控件的鼠标移动事件中写下如下代码
复制
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (blnDraw) { if (e.Button != MouseButtons.Left)//判断是否按下左键 return; Point tempEndPoint = e.Location; //记录框的位置和大小 rect.Location = new Point( Math.Min(start.X, tempEndPoint.X), Math.Min(start.Y, tempEndPoint.Y)); rect.Size = new Size( Math.Abs(start.X - tempEndPoint.X), Math.Abs(start.Y - tempEndPoint.Y)); pictureBox1.Invalidate(); } }
在pictureBox控件的鼠标抬起事件中写下如下代码
复制
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { blnDraw = false; }
在pictureBox控件的重绘事件中写下如下代码
复制
private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (blnDraw) { if (rect != null && rect.Width > 0 && rect.Height > 0) { Color mcolor=Color.Green; if (radioButton1.Checked) { mcolor = Color.Red; } else if(radioButton2.Checked){ mcolor = Color.Blue; } e.Graphics.DrawRectangle(new Pen(mcolor, Convert.ToInt32(textBox1.Text)), rect);//重新绘制颜色为红色 } } }
使用鼠标随便拖拽一个图形看看吧,你也可以结合前面的讲解,将图形换成填充图形。
评论 (0)