c#操作emgucv 鼠标画矩形

时间:2021-12-16 15:58:57
各路大神求解答:

//....................//....................................
        Image<Bgr, Byte> img=null;        
        //
        private bool mouseStatus = false;//鼠标状态,false为松开     
        private Point startPoint;//鼠标按下的点
        private Point endPoint;//
        private Rectangle currRect;//当前正在绘制的举行
        private int minStartX, minStartY, maxEndX, maxEndY;//

  private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (img != null)
            {
                mouseStatus = true;
                startPoint.X = e.X;
                startPoint.Y = e.Y;
                //重新一个矩形,重置最大重绘矩形的上下左右的坐标
                minStartX = e.X;
                minStartY = e.Y;
                maxEndX = e.X;
                maxEndY = e.Y;
            }           
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if ( mouseStatus)
            {
                endPoint.X = e.X; 
                endPoint.Y = e.Y;
                //这一段是获取要绘制矩形的上下左右的坐标,如果不这样处理的话,只有从左上开始往右下角才能画出矩形。
                //这样处理的话,可以任意方向,当然中途可以更换方向。
                int realStartX = Math.Min(startPoint.X, endPoint.X);
                int realStartY = Math.Min(startPoint.Y, endPoint.Y);
                int realEndX = Math.Max(startPoint.X, endPoint.X);
                int realEndY = Math.Max(startPoint.Y, endPoint.Y);

                minStartX = Math.Min(minStartX, realStartX);
                minStartY = Math.Min(minStartY, realStartY);
                maxEndX = Math.Max(maxEndX, realEndX);
                maxEndY = Math.Max(maxEndY, realEndY);
                currRect = new Rectangle(realStartX, realStartY, realEndX - realStartX, realEndY - realStartY);
                img.Draw(currRect, new Bgr(Color.Red), 1);
                pictureBox1.Image = img.Bitmap;
            }
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            mouseStatus = false;
            endPoint.X = e.X; 
            endPoint.Y = e.Y;          
        } 
   


以上是鼠标操作的代码。
运行后,画矩形时生成了很多重绘的矩形,有什么方法把他们去除掉吗?
这个以前是用c++作的,那会可以用透明画刷把它重绘掉,到c#里还真不知道怎么搞了。大家有什么号办法不?

8 个解决方案

#1


自己顶,求解惑啊。。。

#2


自己顶,求解惑啊。。。

#3


写错事件了。。

#4


晕 这回答的~~ 求解答啊 求解答~~

#5


帖子又沉了,。。Help~~~~~

#6


该回复于2011-10-25 09:07:13被版主删除

#7


关键字     this.Invalidate();_Paint

#8


this.Invalidate();具体要怎么用呢??paint事件里面?

#1


自己顶,求解惑啊。。。

#2


自己顶,求解惑啊。。。

#3


写错事件了。。

#4


晕 这回答的~~ 求解答啊 求解答~~

#5


帖子又沉了,。。Help~~~~~

#6


该回复于2011-10-25 09:07:13被版主删除

#7


关键字     this.Invalidate();_Paint

#8


this.Invalidate();具体要怎么用呢??paint事件里面?