高效率种子填充算法
文章同时发布于:https://pengfeixc.com/blogs/minicode/react-paint-tool
最近写了一个画板小程序,为了实现画板的填充功能,研究了一下图形学填充算法。我在网上查找了大量的资料,最终找到了一个效率很高的填充算法。可以在minicode看到我的画板程序,测试下填充功能的速度。
下面我将讲述我的算法实现过程。
一. 种子填充算法(flood fill or seed fill)
网上有很多讲解种子填充算法的,大家一搜就知道有4联通的方式和8联通的方式。但是4联通和8联通的算法效率太低了,根本无法用来实现画板的填充功能。
4联通的算法,我简单描述一下:
- 从一个像素点出发,将其入栈。
- 处理栈顶的像素点,弹栈。
- 判断这个像素点的上、下、左、右的4个像素点是否满足填充要求,若满足将其染色,并入栈。
- 继续弹栈,重复2和3步骤,直至栈为空。
8联通算法与4联通算法同理。
至于它们的代码,比较简单,我就偷懒不写出来了。
二. 高效率的填充算法(efficient flood fill)
这个