gpt4 book ai didi

c++ - 不通过起始颜色的 4 向填充功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:24 24 4
gpt4 key购买 nike

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

bool fill(PixMap& image,Pixel fillColour,int x, int y)

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

    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);
}
}

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

最佳答案

想想函数原型(prototype)是怎么说的:

使用 fillColor 在 x/y 方向填充图像。

它没有说:

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

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

另一方面,您的目标原型(prototype)将总是填充——这就是为什么它不需要oldColor

长话短说:不要对旧颜色进行一次测试,而是这样做:

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

关于c++ - 不通过起始颜色的 4 向填充功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com