标签:
算法描述:
种子填充算法原理和程序都很简单, 但由于多次递归, 费时、费内存, 效率不高。为了减少递归次数, 提高效率可以采用扫描线种子填充算法。算法的基本过程如下: 当给定种子点( x, y) 时, 首先填充种子点所在扫描线上的位于给定区域的一个区段, 然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段, 并依次保存下来。反复这个过程, 直到填充结束。
区域填充的扫描线算法可由下列4 个步骤实现:
① 初始化: 堆栈置空。将种子点(x, y) 入栈。
② 出栈: 若栈空则结束。否则取栈顶元素( x, y) , 以y 作为当前扫描线。
③ 填充并确定种子点所在区段: 从种子点(x, y) 出发, 沿当前扫描线向左、右两个方向填充, 直到边界。分别标记区段的左、右端点坐标为xl 和xr。
④ 确定新的种子点: 在区间[xl,xr] 中检查与当前扫描线y上、下相邻的两条扫描线上的像素。若存在非边界、未填充的像素, 则把每一区间的最右像素作为种子点压入堆栈, 返回第②步。
详细代码:Computer Graphics - code_2
生成结果:
标签:
原文地址:http://www.cnblogs.com/xd-g/p/5118716.html