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)