Sze*_*eri 6 algorithm image-processing
所有绘画程序,无论它们多么简单或复杂,都带有填充工具.这基本上用另一种颜色替换封闭区域的颜色.我知道有不同的API可以做到这一点,但我对算法很感兴趣.实现此工具的有效算法是什么?
我能想到的一些事情很快就是:
1所有其他颜色0.Flood Fill算法是最常用的算法.以下是我的旧大学教科书"Helen Baker的计算机图形学"第3版的直接版本:
void floodFill4 (int x, int y, int fillColor, int interiorColor)
{
int color;
/* Set current color to fillColor, then perform the following operations */
getPixel(x, y, color);
if (color == interiorColor)
{
setPixel(x,y); // Set color of pixel to fillColor.
floodFill4(x + 1, y, fillColor, interiorColor);
floodFill4(x - 1, y, fillColor, interiorColor);
floodFill4(x, y + 1, fillColor, interiorColor);
floodFill4(x, y - 1, fillColor, interiorColor);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于大图像,由于每个像素的递归,上面可能会给出堆栈溢出错误.通常,此算法会被修改,以便在填充一行像素时使用迭代,然后递归填充上方和下方的行.正如@kasperjj所述,维基百科有一篇关于此的好文章.