- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一种填充方法,用红色填充图像(狗的轮廓)。
在我的 TestShellDlg.cpp 中是洪水填充方法。 CTestShellDlg::m_pScreenDib 成员是一个 CDIB32 位图类,包含图形并绘制它们。
我想对当前像素进行采样,如果它不是黑色(轮廓的颜色),则将其着色为红色。这是 Dib32.cpp 类中预构建的 getter:
void CDIB32::GetRGB(int x, int y, BYTE& r, BYTE& g, BYTE& b)
{
if (x >= Width() || y >= Height())
IERROR;
int off = y * ByteWid() + x * 4;
b = m_pBits[off];
g = m_pBits[off+1];
r = m_pBits[off+2];
}
这是我在 TestShellDlg.cpp 类中的 floodfill 方法:
void CTestShellDlg::FloodFill(CPoint& mid)
{
byte r,g,b;
//while the current pixel colour is not black, set it to red and recursively loop
m_pScreenDib ->GetRGB(mid.x,mid.y, (byte) r,(byte) g,(byte)b);
while(r !=(byte)0, g !=(byte)0, b !=(byte)0)
{
m_pScreenDib -> SetRGB(mid.x, mid.y,(byte)255,(byte) 0,(byte) 0);
mid.x++;
FloodFill(mid);
mid.x--;
FloodFill(mid);
mid.y++;
FloodFill(mid);
mid.y--;
FloodFill(mid);
}
}
在构建和运行项目时,我在 GetRGB() 函数的 IERROR 处得到一个断点。
通过堆栈,这发生在 mid.x-- 经过几次运行之后。该程序似乎从未达到 mid.y++。
我也试过这个作为我的停止条件:
while(mid.x < m_pScreenDib ->Width() && mid.y < m_pScreenDib -> Height())
同样的结果。
hive 思维中的任何人都可以提供原因和可能的解决方案吗?非常感谢大家。
最佳答案
有几个问题。先解决这些问题,看看会发生什么:
您正在递归调用 FloodFill
,而 r
、g
和 b
并不都相等0. 但是您不会在 while 循环中更新这些值中的任何一个。那会给你一个无限循环。
这里还有一个问题:
mid.x++;
FloodFill(mid);
mid.x--;
FloodFill(mid);
令 x 为 100。在 mid.x++
之后,x 将为 101。然后您执行 x--
再次使 x=100。因此,您使用相同的 x 值递归调用 FloodFill()
。我不认为那是你想要的。
在 FloodFill
中,您在再次调用 FloodFill
之前递增 x
。但是你不检查你是否已经到达图像的右边界,所以 FloodFill
将被递归调用,并且 x
的值越来越大,直到你得到一个 stackoverflow,访问冲突,或者 x
由于整数溢出(无论先发生什么)而设置为 0 agein。
关于c++ flood fill图像递归算法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343250/
我正在编写一种填充方法,用红色填充图像(狗的轮廓)。 在我的 TestShellDlg.cpp 中是洪水填充方法。 CTestShellDlg::m_pScreenDib 成员是一个 CDIB32 位
如果我尝试填充一个 100x100 的矩形,则会出现溢出。50x50 效果很好。 有没有办法解决溢出问题? 我还打印出 Stack Number,有时工作矩形 Stack 比大的 Stack 高(它在
游戏链接在这里: http://floodit.appspot.com/ 规则很简单,你必须从邻居中选择一种颜色,起点是左上角,然后颜色发生变化,你就淹没了更多的区域。目标是淹没整个网格。 stack
我正在使用 Java 开发一个小型绘图应用程序。我正在尝试通过实现 Flood Fill 算法来创建“桶填充”工具。 我尝试使用递归实现,但这是有问题的。不管怎样,我在网上搜索了一下,似乎为此目的,建
题目地址:https://leetcode.com/problems/flood-fill/description/ 题目描述 Animage is represented by a 2-D ar
def getRegionSize(cell, world): region = [] frontier = [cell] val = world[cell[0]][cell[
我必须找出阻碍交通的下雨阈值。 所以,我必须打印降水阈值来阻止交通。 例如) 3 3 0 1 2 1 2 3 0 2 6 输出:3 这个问题有什么好的算法或者关键词吗? 谢谢 最佳答案 找到一棵具有最
我有 N × M 个网格,其中每个单元格都用一种颜色着色。 当玩家点击颜色为 α 的网格中的任何单元格时,网格最左上角的颜色为 β 的单元格会接收到颜色 α,但不仅如此:所有连接到的单元格仅使用颜色
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在开发一个 Paint 应用程序,其中我正在实现类似于 MS Paint 应用程序的 BucketFill 功能。 我已经使用几种 FloodFill 算法对其进行了编码,但是填充颜色过程花费了太
我有一个 C# 应用程序,旨在使用线程在我的服务器中发出 http post 请求。 (这是为了简化问题,因为事实上,有几个不同的trheads在不同的URI上发出请求) 事实证明,这些踏板被设置为在
我正在尝试使用洪水填充来清理扫雷游戏中的开放区域。我做了一个简单的洪水填充函数,但我不断收到堆栈溢出错误代码 public void revealEmpty(int givenIndex){
我有一个具有以下结构的 MySQL 表: CREATE TABLE IF NOT EXISTS `np_voxels` ( `world` VARCHAR(16) NOT NULL, `x`
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 5 年前。 编辑问题以包含 desired behavior, a specific proble
我正在为 python 扫雷器实现一个 flood-fill 算法。 在我展示算法之前,让我定义一些重要的东西: BOARD,打印漂亮时,看起来像这样: X 1 1 1 3 X 2 1 2 X 2
我正在尝试使用 flood fill算法在列表中找到所有相似的相邻对象,并将它们标记为删除。我试图改编维基百科上的伪代码,但卡住了。 列表中的每个对象都有一个 int X 值、一个 int Y 值、一
我正在使用 Java 编写一个简单的绘图应用程序。我正在尝试使用 Flood Fill 算法的递归实现作为我的“桶填充”工具。 但是,这总是给我一个StackOverFlowError。 (无论我使用
我正在尝试制作 Flood-It 风格的游戏,但我遇到了主要算法的问题。 该算法会检查您已经控制的每个方 block ,并找到具有您无法控制的所选颜色的相邻方 block 。 变量: 1 - $boa
我正在寻找最有效的解决方案,有很多方法可以从套接字读取数据和解码 json。我显然应该使用 json.Encoder 和 json.Decoder,因为它们适合套接字的流式处理,但我有防止套接字泛滥的
我正在编写一种填充方法,用红色填充图像(狗的轮廓)。 在我的 TestShellDlg.cpp 中是洪水填充方法。 CTestShellDlg::m_pScreenDib 成员是一个 CDIB32 位
我是一名优秀的程序员,十分优秀!