洪水填充实施

时间:2014-06-19 20:12:27

标签: c++ 2d flood-fill

我的洪水填充功能有问题:

void floodfill(int x, int y,Pixel old, Pixel new){

Pixel current = getPixel(x,y);

if(current.r == old.r && current.g == old.g && current.b == old.b){

    setPixel(x,y,new);

    floodfill(x+1,y,old,new);
    floodfill(x-1,y,old,new);
    floodfill(x,y+1,old,new);
    floodfill(x,y-1,old,new);
    floodfill(x+1,y+1,old,new);
    floodfill(x-1,y-1,old,new);
    floodfill(x+1,y+1,old,new);
    floodfill(x-1,y+1,old,new);
}
}

在struct'Pixel'中我有像素的rgb值。我正在尝试填充一个正方形,当我到达正方形的边界时(颜色从白色变为黑色,边界位于x = 200处),该功能不会更改为其他像素,而只是无休止地将x值更改为198和199(永远不要记住y值)。有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:0)

一个可能的问题是,您填写(x+1,y+1)两次而错过(x+1,y-1)

floodfill(x+1,y,old,new);
floodfill(x-1,y,old,new);
floodfill(x,y+1,old,new);
floodfill(x,y-1,old,new);
floodfill(x+1,y+1,old,new);
floodfill(x+1,y-1,old,new); //Missing this case
floodfill(x-1,y+1,old,new);
floodfill(x-1,y-1,old,new);

答案 1 :(得分:0)

这听起来像setPixel没有将(x,y)的颜色设置为“new”。所以,正在发生的是以下递归调用序列:

(199,y) - >(200,y)[停止因为边框颜色与旧颜色不同]         - >(198,y) - >(199,y)[(199,y)被调用,因为setPixel可能没有改变(199,y)的颜色] - > ...