求不规则形状内像素点

原文地址: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://files.cnblogs.com/v-miclin/PtInShapeTest.swf

你可一看到 边缘外部像素 好像注水一样逐渐注入 最后整个矩形非外部的像素即为边缘内部像素。

最后的结果:

源码: 不给。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值