c语言 连通域算法 递归,VC++ 6.0编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!...
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编写计算机图形学中的种子填充算法,想用递归的八向连通域,求助!...相关推荐
- 计算机图形学中的边标志算法c++程序实现2
摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时 ...
- 【计算机图形学 】扫描线多边形填充算法 | OpenGL+鼠标交互
文章目录 其他计算机图形学实验 前言 思路借鉴 步骤 1.点的结构体 2. AET 活性边表.NET新边表 的结构体 3. 扫描线算法实现 4. 改变鼠标响应函数 完整代码 总结 其他计算机图形学实验 ...
- 【Algorithm】种子填充算法
转载:https://www.cnblogs.com/icmzn/p/5065306.html [平面区域填充算法]是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边 ...
- 多边形区域填充算法--扫描线种子填充算法
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://bl ...
- vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤
想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...
- 图形学画直线c语言,计算机图形学:3种画直线算法(转)
//--------------------------------------------------------------------- //绘制直线的DDA算法基本函数 //--------- ...
- 用VC++6.0 编写一个完整的
屏幕保护程序是一个Win32应用程序,与一般的Win32应用程序不同之处在于:1.扩展名要求为 SCR :2.命令行要有一定的格式,以便操作系统向其传递信息,如 运行模式,父窗口句柄(Handle t ...
- 用VC++6.0编写拨号程序 作者:陈晓东 (转)
用VC++6.0编写拨号程序 作者:陈晓东 (转)[@more@]用VC++6.0编写拨号 程序 作者:陈晓东 发布时间:2001/05/22 文章摘要: 本文利用visual c++6.0给出了 ...
- 图形学画直线c语言,002计算机图形学之直线画线算法
002计算机图形学之直线画线算法 我们知道直线方程的斜截式是如下的样子: y = kx +b 在显示器上显示直线的话,如果使用如上的方程,每描一个点 需要进行一次浮点乘法,一次浮点加法,和取整操作. ...
最新文章
- 冒号表达式在计算帧率中的作用
- Tensorflow快餐教程(8) - 深度学习简史
- torch yolov3梯度发散
- python画直方图成绩分析-使用Python绘制直方图和正态分布曲线
- ubuntu g++ 升级
- 复数域上x^n ±1=0的解
- python做什么模型_主题模型初学者指南[Python]
- git 的 merge 与 no-ff merge 的不同之处
- ssh隧道 mysql,如何通过SSH隧道连接MySQL
- c语言:最长对称子串(3种解决方案)
- Java中线程的创建有两种方式
- Open3d之点云全局配准
- C#中英文逗号之间的相互转化
- 计算机专业抑郁症多,社工专业毕业的我得了抑郁症,我的痛苦别人难以理解?...
- c++编游戏-扫雷-c++游戏将彩色化-windows7自带扫雷游戏休闲娱乐
- android平板电脑 刷机工具,小白必看,安卓平板电脑刷机教程之一键刷机
- JDK8各个历史版本下载方法
- Microsoft FxCop 的设计规则 .
- 服务器系统升级介绍,服务器操作系统升级方案
- 【读书笔记】理工科思维解读《万万没想到》