让代码更简单

C#使用GDI在图像中绘制感兴趣区域ROI

重要:本文最后更新于2019-09-29 08:45:31,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

GDI是图形设备接口的英文Graphics Device Interface缩写,它在Windows中处理所有图形图像的输出。ROI是region of interest的缩写,中文意思就是感兴趣的区域。在机器视觉中应用非常广,这种方式可以大幅度提高效率及灵活性。这篇文章教大家如何在图像中使用C#绘制ROI感兴趣区域,大家可以结合自己的图像实现自己想要的效果。

C#在图像中绘制感兴趣区域ROI

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);//重新绘制颜色为红色
}

}
}

使用鼠标随便拖拽一个图形看看吧,你也可以结合前面的讲解,将图形换成填充图形。

感觉很棒!可以赞赏支持我哟~

8 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐