超过Javascript递归Floodfill最大调用堆栈

时间:2018-09-09 15:59:58

标签: javascript overflow flood-fill

我目前正在制作像素艺术编辑器,我的洪水填充算法似乎溢出了。

fill(x, y, new_color, old_color) {
    var data = this.data_at(x, y);
    if(data == null) { return; }

    var is_old_color = compare_data(data, old_color)
    if(!is_old_color) { return; }

    this.render_ctx.fillStyle = rgba(new_color);
    this.render_ctx.fillRect(x, y, 1, 1);
    this.fill(x, y + 1, new_color, old_color)
    this.fill(x, y - 1, new_color, old_color)
    this.fill(x + 1, y, new_color, old_color)
    this.fill(x - 1, y, new_color, old_color)
}

data_at(x, y) {
    if(state.current_selection.contains_pixel(x, y)) {
        return this.render_ctx.getImageData(x, y, 1, 1).data;
    }
    return null;
}

compare_data()仅检查当前像素的颜色是否与old_color相同。

使用小于110 * 110像素的画布时,一切正常。任何较大的结果都会超出最大调用堆栈,并且只会填充画布的一部分。

0 个答案:

没有答案