| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2167 人关注过本帖
标题:用mfc实现扫描线种子填充算法,但老是报栈出错误,求懂的人解决一下
只看楼主 加入收藏
新月飞鸟
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-22
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:4 
用mfc实现扫描线种子填充算法,但老是报栈出错误,求懂的人解决一下
void CTestdView::ScanlineSeedfill(int x, int y, COLORREF boundaryvalue, COLORREF newvalue)
{
    using namespace std;
   
    int x0,x1,xr,y0,xid;
    bool flag;
    int count=0;
    stack<point> s;
    //point p;
    s.push(point(x,y));//种子像素入栈

    while(!s.empty())//判断栈是否为空
    {
        p=s.top;//读取栈顶元素
        s.pop ();//栈顶像素出栈
        x=p.x;
        y=p.y;
        SetPixel(x,y,newvalue);

        x0=x+1;
        while(GetPixel(x0,y)!=boundaryvalue && GetPixel(x0,y)!=newvalue)//填充种子右方像素
        {
            SetPixel(x0,y,newvalue);
            x0++;

        }
        xr=x0-1;//最右边像素位置

        x0=x-1;
        while(GetPixel(x0,y)!=boundvalue && GetPixel(x0,y)!=newvalue)//填充种子左方像素
        {
            SetPixel(x0,y,newvalue);
            x0--;

        }
        xl=x0+1;//最左边像素的位置

        /*检查上一条扫描线与下一条扫描线,若存在非边界且未填充的像素,
          则选取代表个连续区间的种子像素入栈*/
        y0=y;
        for(int i=1;i>=-1;i-=2)
        {
            x0=xr;
            y=y0+i;
            while(x0>=xl)
            {
                flag=false;
                while((GetPixel(x0,y)!=boundvalue && GetPixel(x0,y)!=newvalue)
                    && (x0>=xl))//寻找当前像素段的种子像素
                {
                    if(!flag)
                    {
                        flag=true;
                        xid=x0;

                    }
                    xo--;

                }

                /*将当前像素段的种子像素压入栈中*/
                if(flag)
                {
                    s.push(Point(xid,y));
                    flag=false;
                }


                /*检查当前填充是否被中断,
                  若被中断,即当前点为边界点或已填充点,
                  寻找左方第一个可填充像素,当前点向左移动*/
                while(((GetPixel(x0,y)!=boundvalue)||
                    (GetPixel(x0,y)!=newvalue))
                    && (x0>=xl))
                    x0--;

            }
        }



    }

}



运行时显示错误如下:
:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(108) : error C2871: 'std' : does not exist or is not a namespace
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2065: 'stack' : undeclared identifier
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2065: 'point' : undeclared identifier
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2065: 's' : undeclared identifier
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : warning C4804: '>' : unsafe use of type 'bool' in operation
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : warning C4552: '>' : operator has no effect; expected operator with side-effect
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(115) : error C2228: left of '.push' must have class/struct/union type
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(117) : error C2228: left of '.empty' must have class/struct/union type
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(117) : fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl.exe 时出错.

搜索更多相关主题的帖子: 算法 填充 count 元素 
2012-11-05 12:01
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:5 
你没有包含<stack>头??

我们都在路上。。。。。
2012-11-06 10:47
新月飞鸟
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 2楼 hellovfp
我加了你说的头文件,并且也把//point p;也恢复了,但却显示如下,大体意思应该是说我没给栈定义类型类型,但我觉得我已经定义了point这个类型了呀


E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2065: 'point' : undeclared identifier
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2955: 'stack' : use of class template requires template argument list
        e:\vc98\include\stack(52) : see declaration of 'stack'
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2133: 's' : unknown size
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2512: 'stack' : no appropriate default constructor available
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(113) : error C2262: 's' : cannot be destroyed
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(114) : error C2146: syntax error : missing ';' before identifier 'p'
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(117) : error C2662: 'empty' : cannot convert 'this' pointer from 'class std::stack' to 'const class std::stack<_Ty,_C> &'
        Reason: cannot convert from 'class std::stack' to 'const class std::stack<_Ty,_C>'
        Conversion requires a second user-defined-conversion operator or constructor
E:\所有写的代码文件包\计算机图形学\test d\test dView.cpp(117) : fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl.exe 时出错.

test dView.obj - 1 error(s), 0 warning(s)
2012-11-07 22:41
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:5 
stack模版需要参数,看错误是你的point类/结构未定义, 如果你的这句没有错误的话,s.push(Point(xid,y));
应该定义stack<Point>注意大小写,如果不是大写的Point类,你自己写的point类/结构放在另一个文件,请包含到当前的这个文件中来。
让stack<point>在定义的时候就能找到类point,这样就能编译成功。
2012-11-08 10:33
新月飞鸟
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-22
收藏
得分:0 
回复 4楼 newdos
我把point改成Point了但是它还是报相同的错误呀。它始终没有没有给我生成一个対栈,在mfc里面怎样生成一个栈,并且引用它呀?
2012-11-14 23:11
快速回复:用mfc实现扫描线种子填充算法,但老是报栈出错误,求懂的人解决一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023626 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved