我的洪水填充功能有问题:
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值)。有人能告诉我我做错了吗?
答案 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)的颜色] - > ...