原文地址:http://www.blogbus.com/linxinboy-logs/261546856.html 上次写了个求凸状的图形内像素点,本来以为求任意形状 包括凹状的图形内的像素点比较麻烦。 后来仔细想了一下,其实很简单。 比如这张图:
如何求黑色线条内部的点呢? 很简单。 首先 我们定义一个节点类 - public class PointInt
-
- public var x:int;
-
- public var y:int;
-
- public var left:Boolean = false;;
-
- public var right:Boolean = false;;
-
- public var up:Boolean = false;;
-
- public var down:Boolean = false;;
-
- public var block:Boolean = false;
-
- public function get fullConnected():Boolean
- {
- return left && right && up && down;
- }
-
- public function PointInt(x:int = 0, y:int = 0, block:Boolean = false)
- {
- this.x = x;
- this.y = y;
- this.block = block;
- }
复制代码
其中 x y 为节点位置 上下左右 分别标记当前节点是否 有找到它上下左右的节点 比如 (0,0)节点 如果找到右边的节点(1,0)则(0,0)的right标记为true, (1,0)的left标记为true. block表示是否是黑色线条区域,即边界。 然后 我们找到边界区域的最大最小 x, y值 minX, maxX minY maxY 我们做一个一个矩形 左上点为 (minX - 1, minY - 1) 右上点为 (maxX + 2, maxY + 2) 如图
所以 此块区域内的第一行节点 肯定是处于线条外部(如果 min http:// X - 1 我们把第一行的节点全部push到一个list中去。 然后遍历这个list 中的节点 如果它不是fullConnected 即它没有找到它上下左右的所有节点 则寻找它没有找到的节点 , push进list 直到list中的所有节点都为fullConnected. 这个过程可以如下看到: 点击以后开始运行
你可一看到 边缘外部像素 好像注水一样逐渐注入 最后整个矩形非外部的像素即为边缘内部像素。 最后的结果:
源码: 不给。
本文来自:http://blog.csdn.net/linxinboy/article/details/19938969
|