Javascript 泛洪填充算法——伪代码的实现问题

Javascript 泛洪填充算法——伪代码的实现问题,javascript,graphics,2d,implementation,flood-fill,Javascript,Graphics,2d,Implementation,Flood Fill,我正在尝试实现洪水填充算法的伪代码。我从Graphics Gemes 1上取的。 以下是伪代码: 不幸的是,当我用JavaScript实现它时,当我使用泛洪填充工具时,它会挂起。 这是我的密码: 函数内部(x,y){ 常数q=4*(x+y*that.w); 常量颜色=[img.data[q]、img.data[q+1]、img.data[q+2]、img.data[q+3]; 返回颜色[0]==toolColor[0]&& 颜色[1]==工具颜色[1]&& 颜色[2]==工具颜色[2]; }

我正在尝试实现洪水填充算法的伪代码。我从Graphics Gemes 1上取的。
以下是伪代码:

不幸的是,当我用JavaScript实现它时,当我使用泛洪填充工具时,它会挂起。 这是我的密码:

函数内部(x,y){
常数q=4*(x+y*that.w);
常量颜色=[img.data[q]、img.data[q+1]、img.data[q+2]、img.data[q+3];
返回颜色[0]==toolColor[0]&&
颜色[1]==工具颜色[1]&&
颜色[2]==工具颜色[2];
}
函数集(x,y){
常数q=4*(x+y*that.w);
img.data[q]=该.color.r;
img.data[q+1]=that.color.g;
img.data[q+2]=该.color.b;
img.data[q+3]=该.color.a;
}
功能填充(x,y){
设skip=false,x1,x2,dy,start;
常数s=[];
s、 推动([y,x,x,1]);
s、 推力([y+1,x,x,-1]);
而(s.length>0){
常数n=s.pop();
y=n[3]+n[0];
x1=n[1];
x2=n[2];
dy=n[3];
x=x1;
而(x>=0&&in(x,y)){
集合(x,y);
x--;
}
如果(x>=x1){
//跳过
跳过=真;
}
如果(!跳过){
开始=x+1;
如果(开始(x好的,我修正了代码。它非常快。也许有人会利用它

更新代码如下:

函数内部(x,y){
常数q=4*(x+y*that.w);
常量颜色=[img.data[q]、img.data[q+1]、img.data[q+2]、img.data[q+3];
返回颜色[0]==toolColor[0]&&
颜色[1]==工具颜色[1]&&
颜色[2]==工具颜色[2];
}
函数集(x,y){
常数q=4*(x+y*that.w);
img.data[q]=该.color.r;
img.data[q+1]=that.color.g;
img.data[q+2]=该.color.b;
img.data[q+3]=该.color.a;
}
功能填充(x,y){
设skip=false,x1,x2,dy,start;
常数s=[];
s、 推动([y,x,x,1]);
s、 推力([y+1,x,x,-1]);
而(s.length>0){
常数n=s.pop();
y=n[3]+n[0];
x1=n[1];
x2=n[2];
dy=n[3];
x=x1;
而(x>=0&&in(x,y)){
集合(x,y);
x--;
}
如果(x>=x1){
//跳过
跳过=真;
}
如果(!跳过){
开始=x+1;
如果(开始而(x个线程通常是“闭合的”作为作者,您接受答案。这可能是您的答案。但您应该包括有助于未来读者解决类似问题的详细信息。您是如何修复代码的?或者您似乎用更新的代码更新了您的问题?如果是,请将其移到您的答案,以便线程遵循问答格式。这样,future阅读器可以轻松地将原始代码与解决方案进行比较。