VC++ 6.0编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!0

填充函数代码如下:

void CComputerGraphicsView::PolygonFill2()//区域填充函数

{

CClientDC dc(this);

COLORREF FillColor,BoundaryColor,PixelColor;//填充色,边界色,当前点像素色

BoundaryColor=RGB(0,0,0);//边界色为黑色

FillColor=RGB(0,0,255);//填充色为蓝色

Head=new Stack_node();//建立堆栈结点

Head->PixelPoint=Seed;//种子结点入栈

Head->Next=NULL;

while(Head!=NULL)//如果栈不为空

{

Stack_node *PopPoint;

PopPoint=Pop();

if(PopPoint==NULL)

{

dc.TextOut(10,10,"填充完毕");

dc.DeleteDC();

return;

}

Last=Base;

dc.SetPixel(PopPoint->PixelPoint,FillColor);//画蓝色种子

//搜索出栈结点的左方像素

PointLeft.x=PopPoint->PixelPoint.x-1;

PointLeft.y=PopPoint->PixelPoint.y;

PixelColor=dc.GetPixel(PointLeft.x,PointLeft.y);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

//不是边界色并且未置成填充色

Push(PointLeft);//左方像素入栈

//搜索出栈结点的上方像素

PointTop.x=PopPoint->PixelPoint.x;

PointTop.y=PopPoint->PixelPoint.y+1;

PixelColor=dc.GetPixel(PointTop);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointTop); //上方像素入栈

//搜索出栈结点的右方像素

PointRight.x=PopPoint->PixelPoint.x+1;

PointRight.y=PopPoint->PixelPoint.y;

PixelColor=dc.GetPixel(PointRight);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointRight);//右方像素入栈

//搜索出栈结点的下方像素

PointBottom.x=PopPoint->PixelPoint.x;

PointBottom.y=PopPoint->PixelPoint.y-1;

PixelColor=dc.GetPixel(PointBottom);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointBottom);//下方像素入栈

PointLeftTop.x=PopPoint->PixelPoint.x-1;

PointLeftTop.y=PopPoint->PixelPoint.y+1;

PixelColor=dc.GetPixel(PointLeftTop);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointLeftTop); //左上方像素入栈

PointRightTop.x=PopPoint->PixelPoint.x+1;

PointRightTop.y=PopPoint->PixelPoint.y+1;

PixelColor=dc.GetPixel(PointRightTop);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointRightTop); //右上方像素入栈

PointLeftBottom.x=PopPoint->PixelPoint.x-1;

PointLeftBottom.y=PopPoint->PixelPoint.y-1;

PixelColor=dc.GetPixel(PointLeftBottom);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointLeftBottom); //左下方像素入栈

PointRightBottom.x=PopPoint->PixelPoint.x+1;

PointRightBottom.y=PopPoint->PixelPoint.y-1;

PixelColor=dc.GetPixel(PointRightBottom);

if(PixelColor!=BoundaryColor && PixelColor!=FillColor)

Push(PointRightBottom); //右下方像素入栈

}

}

编译运行无错,但是扫描结果会超出多边形区域并死循环,这是为什么?如果把左上左下右上右下四个搜索方向去掉改成四向搜索却可行!

c语言 连通域算法 递归,VC++ 6.0编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!...相关推荐

  1. 计算机图形学中的边标志算法c++程序实现2

    摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时 ...

  2. 【计算机图形学 】扫描线多边形填充算法 | OpenGL+鼠标交互

    文章目录 其他计算机图形学实验 前言 思路借鉴 步骤 1.点的结构体 2. AET 活性边表.NET新边表 的结构体 3. 扫描线算法实现 4. 改变鼠标响应函数 完整代码 总结 其他计算机图形学实验 ...

  3. 【Algorithm】种子填充算法

    转载:https://www.cnblogs.com/icmzn/p/5065306.html [平面区域填充算法]是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边 ...

  4. 多边形区域填充算法--扫描线种子填充算法

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://bl ...

  5. vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤

    想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...

  6. 图形学画直线c语言,计算机图形学:3种画直线算法(转)

    //--------------------------------------------------------------------- //绘制直线的DDA算法基本函数 //--------- ...

  7. 用VC++6.0 编写一个完整的

    屏幕保护程序是一个Win32应用程序,与一般的Win32应用程序不同之处在于:1.扩展名要求为 SCR :2.命令行要有一定的格式,以便操作系统向其传递信息,如 运行模式,父窗口句柄(Handle t ...

  8. 用VC++6.0编写拨号程序 作者:陈晓东 (转)

    用VC++6.0编写拨号程序 作者:陈晓东 (转)[@more@]用VC++6.0编写拨号 程序 作者:陈晓东 发布时间:2001/05/22   文章摘要: 本文利用visual c++6.0给出了 ...

  9. 图形学画直线c语言,002计算机图形学之直线画线算法

    002计算机图形学之直线画线算法 我们知道直线方程的斜截式是如下的样子: y = kx +b 在显示器上显示直线的话,如果使用如上的方程,每描一个点 需要进行一次浮点乘法,一次浮点加法,和取整操作. ...

最新文章

  1. 冒号表达式在计算帧率中的作用
  2. Tensorflow快餐教程(8) - 深度学习简史
  3. torch yolov3梯度发散
  4. python画直方图成绩分析-使用Python绘制直方图和正态分布曲线
  5. ubuntu g++ 升级
  6. 复数域上x^n ±1=0的解
  7. python做什么模型_主题模型初学者指南[Python]
  8. git 的 merge 与 no-ff merge 的不同之处
  9. ssh隧道 mysql,如何通过SSH隧道连接MySQL
  10. c语言:最长对称子串(3种解决方案)
  11. Java中线程的创建有两种方式
  12. Open3d之点云全局配准
  13. C#中英文逗号之间的相互转化
  14. 计算机专业抑郁症多,社工专业毕业的我得了抑郁症,我的痛苦别人难以理解?...
  15. c++编游戏-扫雷-c++游戏将彩色化-windows7自带扫雷游戏休闲娱乐
  16. android平板电脑 刷机工具,小白必看,安卓平板电脑刷机教程之一键刷机
  17. JDK8各个历史版本下载方法
  18. Microsoft FxCop 的设计规则 .
  19. 服务器系统升级介绍,服务器操作系统升级方案
  20. 【读书笔记】理工科思维解读《万万没想到》

热门文章

  1. 无服务器TOP3大关键问题及解决方案
  2. 图解+笔记-4.2.1 字符串获取操作、字符串合并和重复操作
  3. 职业生涯第一次:老板让我写个 BUG!
  4. js 变量的声明能提升 初始化不会提升
  5. shell:概述、脚本编写、变量的简单基础
  6. java Excel导入、自适应版本、将Excel转成Listmap对象
  7. CPU位数、操作系统位数、应用程序位数浅析
  8. Debug程序的使用
  9. Maven 打包过滤掉jar包、class文件和指定jsp文件
  10. 使用ajax局部更新Razor页面