在一幅图像中,比如一个叶片,我想用鼠标点击的方法,选定叶片的边缘轮廓,然后把选定的区域剪裁下来,我的思路不清,请各位提供一些代码参考,小妹不胜感激;

解决方案 »

  1.   

    首先考虑建立数据结构如果是直线段拟合,那么只需要建立数组或者链表来存放鼠标左键选择的坐标点,如果是曲线拟合,通常用二次曲线,那么每个点不仅仅要记录座标了,还要记录点所在的切线了和曲率了。有了这些数据,就可以构造出一个封闭区域,对图中每一个点都做运算,判断是不是在区域内,判断的方法,如果是直线段拟合,是很简单的,算法你自己慢慢想,我只记得很早的时候大众软件上面有过一个擂台赛的题目就是这个,我记得我用的办法是这样的:把两个点连接起来的线段看成是有方向的,方向,就是在用鼠标点出区域的时候顺序连接作为方向,那么,顺着方向,在区域内的点,都在左侧或者都在右侧。区域外的有左有右。在线上的只要判断是在延伸线上还是在线段上。只要出现一次左右差,立即就可以判断点在区域外。如果是曲线拟合,也是一样的,不过要判断在曲线左还是右的算法不一样。为了减少数据量,可以,先做一个圆,这个圆可以包含所有定义点,在圆外的点自然不在区域内,不用判断,需要判断的就是在圆内的,排列出圆内的点,用公式就可以了,圆外的连判断计算都不参加。勾画区域的界面,可以参照photoshop中用钢笔工具勾画区域的办法,那个很多人都很习惯了。
      

  2.   

    通常游戏里面不做这样费时的操作的。游戏里面数百个贴图同时出现,都做判断累死!都是用透明色的,贴图的背景就用透明色,直接往上面刷(bitblt),遮盖关系,用层的概念就可以了,就是刷的顺序不同。有些游戏,选中人物,出现高亮的边线,那个,可以用程序,也可以用图,就是选中人物用其他的贴图。用程序,勾画边线的算法,只要一个点周围的八个点中有一个出现背景色,那么这个点就是边界点了,简单吧。