Flood Fill 算法是最常用的。以下是直接来自我的旧大学教科书“使用 OpenGL 的计算机图形学”的一个幼稚版本,作者是 Hearn 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);
}
}
但是,对于大图像,由于对每个像素进行递归,上述内容可能会给您一个堆栈溢出错误。通常,该算法会被修改,以便在填充一行像素时使用迭代,然后递归地填充上面和下面的行。正如@kasperjj 所说,维基百科有一篇很好的文章。