机器视觉入门之路(二五,橡皮筋技术(可拖拽工具),c#)

要截取一幅特征图像,进行学习匹配,经常会用到,那么我们经常会用到矩形框的鼠标拖拽行为,人们称其为橡皮筋技术,首先,我们先拖动一根线,其次再搞定其他。我们仍然遵循最轻量级代码化,以后不足,再扩充。

好,走起!

第一,声明一条线,并画出来,这一次,线中心多了一个小框,如下:

看代码:   mg_line testline4 = new mg_line(new PointF(400, 400), new PointF(600, 400));//

  PointF m_LineCenter = new PointF();

第二,初始化m_LineCenter在form()中,

 m_LineCenter = new PointF(testline4.pt_start.X / 2 + testline4.pt_end.X / 2, testline4.pt_start.Y / 2 + testline4.pt_end.Y/ 2);

第三,在 pictureBox1_Paint()函数中画出先和小框,

             g.DrawLine(new Pen(Brushes.Black), testline4.pt_start, testline4.pt_end);//
            //lineCentre
            g.DrawRectangle(new Pen(Brushes.Black), (int)m_LineCenter.X - 5, (int)m_LineCenter.Y - 5, 10, 10);

第四,关键步骤,当鼠标移动进入线中心小框,直线就跟随鼠标走路了,哈哈!这不拖动了?

  private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {    float a=m_LineCenter.X ;float b=m_LineCenter.Y;
            if (e.X <= m_LineCenter.X + 5 && e.X >= m_LineCenter.X - 5
                 && e.Y >= m_LineCenter.Y - 5 && e.Y <= m_LineCenter.Y + 5)//鼠标进入小矩形框,随鼠标改变线和小框
            {

                PointF temp = new PointF(a - e.X, b - e.Y);
                testline4.直线平移(temp);//直线平移后改变,线中心也要改变
                m_LineCenter = new PointF(testline4.pt_start.X / 2 + testline4.pt_end.X / 2, testline4.pt_start.Y / 2 + testline4.pt_end.Y / 2);
            }
            pictureBox1.Invalidate();
        }

我这不是主流的橡皮筋技术,但解决问题就好。请你尝试解决以下问题:

1,鼠标移动太快,线移动跟不上,掉队了!未走到想要位置

2,进入小框,能否按下鼠标左键时移动,弹起鼠标左键时,释放线拖动?

3,能否在鼠标拖动释放期间,鼠标改变形状?

4,能否让直线拖动旋转呢?

5,你能否设计拖动一个矩形呢?

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页