首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不通过起始颜色的4路洪水填充功能

不通过起始颜色的4路洪水填充功能
EN

Stack Overflow用户
提问于 2015-02-23 22:50:59
回答 1查看 1.1K关注 0票数 2

我需要编写一个递归的洪水填充函数,原型如下所示:

代码语言:javascript
复制
bool fill(PixMap& image,Pixel fillColour,int x, int y)

图像是会被洪水淹没的“图像”部分,fillColour是用来填充图片的特定区域的颜色。要填充的第一个像素的x和y的坐标。问题是,我在网上找到的算法还包括oldColor变量,或者起始像素的原始颜色。如果要填充该颜色的像素与原始像素的颜色不同,则递归停止。

代码语言:javascript
复制
    void floodFill4(int x, int y, int newColor, int oldColor) 
{ 
    if(x >= 0 && x < w && y >= 0 && y < h && screenBuffer[x][y] == oldColor && screenBuffer[x][y] != newColor) 
    { 
        screenBuffer[x][y] = newColor; //set color before starting recursion

        floodFill4(x + 1, y,     newColor, oldColor);
        floodFill4(x - 1, y,     newColor, oldColor);
        floodFill4(x,     y + 1, newColor, oldColor);
        floodFill4(x,     y - 1, newColor, oldColor);
    }     
}

但是,在我的原型中没有这样的变量,我不允许更改它。如何进行不淹没所有图像的递归洪水填充?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 02:42:29

想想函数原型是怎么说的:

fillColor填充x/y处的图像。

它并没有说:

当有fillColor时,在x/y处用oldColor填充图像,否则什么也不做。

后者是您的floodfill4原型。当调用floodfill4时,不确定是否会出现填充,因为它必须首先检查。

另一方面,您的目标原型将始终填充-这就是为什么它不需要oldColor

长话短说:与其对旧颜色进行一次测试,不如这样做:

代码语言:javascript
复制
if pixel at x/y is fillColor:
    return
save oldColor at x/y
replace pixel at x/y with fillColor

for all neighboring pixels:
    if pixel at neighbor is oldColor:
        recursive call
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28685102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档