求类似WindowXP画图“任意形状的裁剪”功能算法
需要从图片中抠出一个多边形区域。目前已经完成了在图片上画出裁剪边线了,但是不知道如何判断选区。
我最初的思路是这样的(有很大缺陷的思路,可以无视):
行扫描,从左至右扫描,当遇到边线时就改为从右至左扫描,再遇到边线就回到左边边线的位置继续从左至右扫描,此时视为在区域内。
依此方法进行,直到遍历了该行的所有像素为止。然后跳到下一行
凸多边形可以实现,但是凹多边形和边线有交叉的多边形在行扫描发现奇点时判断选区会发生误判断。
画图工具中的“任意形状的裁剪”功能很不错,请问实现的原理是什么呢?
请各路大侠不吝赐教,推荐相关文献也可以。 任意形状裁剪 凹多边形 奇点处理
[解决办法]
推荐一个思路:
所有顶点都是已知的,所以你可以一条线段一条线段地来。假设非选区是一种颜色,选区是这种颜色的反色,扫描前将整幅图像设置为非选区颜色,然后在每条线段上的每一个点处开始向右扫描,在扫描的时候每遇到一个点就将该像素的颜色反色,在所有线段都扫描结束之后就获取了特定颜色的选区,然后你对选区进行操作就行了。
说得可能有点乱,但其实还是基于行扫描