吉林大学:《计算机图形学》课程电子教案(PPT课件)第二章 图形基元的显示 第四节 多边形的扫描转换算法

利用区域的连通性进行区域填充, 除了需要区域应该明确定义外,还需要 事先给定一个区域内部象素,这个象素 称为种子。 做区域填充时,要进行对光栅网格 的遍历,找出由种子出发能达到而又不 穿过边界的所有象素。 这种利用连通性的填充,其主要优 点是不受区域不规则性的影响,主要缺 点是需要事先知道一个内部象素
利用区域的连通性进行区域填充, 除了需要区域应该明确定义外,还需要 事先给定一个区域内部象素,这个象素 称为种子。 做区域填充时,要进行对光栅网格 的遍历,找出由种子出发能达到而又不 穿过边界的所有象素。 这种利用连通性的填充,其主要优 点是不受区域不规则性的影响,主要缺 点是需要事先知道一个内部象素

void Floodfill(int x,int y,COLORREF oldvalue,COLORREF newvalue) /:(x,y)为种子oldvalue是原值 newvalue 是新值,应不等于原值。*/ if (GetPixel(x,y)==oldvalue) {SetPixel(x,y,newvalue);//赋值为新值 Floodfill(x,y-l,oldvalue,.newvalue);l/四向扩散 Floodfill(x,y+1,oldvalue,newvalue); Floodfill(x-1,y,oldvalue,newvalue); Floodfill(x+1,y,oldvalue,newvalue);
void Floodfill(int x,int y,COLORREF oldvalue,COLORREF newvalue) /*(x,y)为种子 oldvalue是原值 newvalue 是新值,应不等于原值。*/ { if (GetPixel(x,y) == oldvalue) { SetPixel(x,y,newvalue);//赋值为新值 Floodfill(x,y-1,oldvalue,newvalue);//四向扩散 Floodfill(x,y+1,oldvalue,newvalue); Floodfill(x-1,y,oldvalue,newvalue); Floodfill(x+1,y,oldvalue,newvalue); } }

void Boundaryfill(int x,int y,COLORREF boundaryvalue,COLORREF newvalue) /(x,y)为种子位置 boundaryvalue是边界象素值 newvalue是区域内象素新值,未填充前区域 内不应有值为aewvaluel的象素。*/ if(GetPixel(x,y)!=boundaryvalue &GetPixel(x,y)!=newvalue) //未达边界且未访问过
void Boundaryfill(int x,int y,COLORREF boundaryvalue,COLORREF newvalue) /*(x,y) 为种子位置 boundaryvalue是边界象素值 newvalue是区域内象素新值,未填充前区域 内不应有值为newvalue的象素。*/ { if( GetPixel(x,y)!=boundaryvalue && GetPixel(x,y)!=newvalue) // 未达边界且未访问过

SetPixel(x,y,newvalue);//赋以新值 Boundaryfill(x,y-1,boundaryvalue,newvalue); //向四个方向扩散。 Boundaryfill(x,y+1,boundaryvalue,newvalue); Boundaryfill(x-1,y,boundaryvalue,newvalue); Boundaryfill(x+1,y,boundaryvalue,newvalue);
{ SetPixel(x,y,newvalue);//赋以新值 Boundaryfill(x,y-1,boundaryvalue,newvalue); //向四个方向扩散。 Boundaryfill(x,y+1,boundaryvalue,newvalue); Boundaryfill(x-1,y,boundaryvalue,newvalue); Boundaryfill(x+1,y,boundaryvalue,newvalue); } }

扫描线种子填充算法 将区域内由边界点限定的同一行内相 连接的不具有新值newvalue的一组象素 称为一个象素段,象素段用它最右边的 象素来标识。 算法的步骤如下: 1.对种子所在象素段进行填充。 2.从右至左检查种子所在行的上一 横行,将查得的象素段依次编号存入堆 栈。接着对种子所在行的下一横行同样 处理
扫描线种子填充算法 将区域内由边界点限定的同一行内相 连接的不具有新值newvalue的一组象素 称为一个象素段,象素段用它最右边的 象素来标识。 算法的步骤如下: 1.对种子所在象素段进行填充。 2.从右至左检查种子所在行的上一 横行,将查得的象素段依次编号存入堆 栈。接着对种子所在行的下一横行同样 处理

3。若堆栈为空则算法结束,否则从堆栈 顶部取出一个象素段。就以这个象素为 新的种子,返回到1。 下面我们用伪C语言写出扫描线填充 算法。 void ScanlineSeedfill(int x,int y,COLORREF boundaryvalue,COLORREF newvalue) int x0,xl,xr,y0,xid; int flag; Stack s;
3.若堆栈为空则算法结束,否则从堆栈 顶部取出一个象素段。就以这个象素为 新的种子,返回到1。 下面我们用伪C语言写出扫描线填充 算法。 void ScanlineSeedfill(int x,int y,COLORREF boundaryvalue,COLORREF newvalue) { int x0,xl,xr,y0,xid; int flag; Stack s;

Point p; s.push(Point(xy);//种子象素入栈 while(!s.isempty() p=spop0;//栈顶象素出栈 X-p.X; y-p.y; SetPixel(x,y ,newvalue); x0=X+1; while(GetPixel(x0,y)!=boundaryvalue)// 填充右方象素
Point p; s.push(Point(x,y));//种子象素入栈 while(!s.isempty()) { p=s.pop(); //栈顶象素出栈 x=p.x; y=p.y; SetPixel(x ,y ,newvalue); x0= x+1; while(GetPixel(x0,y)!=boundaryvalue)// 填充右方象素

{ SetPixel(x0,y,newvalue); x0++; 3 xr=x0-1;//最右象素 x0=X-1; while(GetPixel(x0,y)!=boundaryvalue)// 填充左方象素 SetPixel(x0,y ,newvalue); x0-;
{ SetPixel(x0 ,y ,newvalue); x0++; } xr=x0-1;//最右象素 x0= x-1; while(GetPixel(x0,y)!=boundaryvalue)// 填充左方象素 { SetPixel(x0 ,y ,newvalue); x0--; }

x=x0+1;/最左象素 /检查上一条扫描线和下一条扫描线, /若存在非边界且未填充的象素, //则选取代表各连续区间的种子象素入 栈。 y0=y; for(int i=1;i>=-1;i-=2) xO=xr; y=y0+i;
xl=x0+1;//最左象素 //检查上一条扫描线和下一条扫描线, //若存在非边界且未填充的象素, //则选取代表各连续区间的种子象素入 栈。 y0=y; for(int i=1;i>=-1;i-=2) { x0=xr; y=y0+i;

while(x0>=xI) flag-0; while((GetPixel(x0,y)!=boundaryvalue) && (GetPixel(x0,y)!=newvalue) &&(x0>x)) if(flag==0)
while(x0>=xl) { flag=0; while((GetPixel(x0,y)!=boundaryvalue) && (GetPixel(x0,y)!=newvalue) && (x0>xl)) { if(flag==0) {
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第一章 计算机图形学简介 第三节 计算机图形学的应用及发展动向 第四节 图形系统的硬件.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第二章 图形基元的显示 第一节 直线扫描转换算法.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第三章 图形变换 第一节 变换的数学基础 第二节 二维图形变换 第三节 二维视见变换.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第一章 计算机图形学简介 第一节 计算机图形学 第二节 计算机图形学的起源.ppt
- 吉林大学:《Windows程序设计》课程电子教案(PPT课件)Windows程序设计教学课件(2/2,主讲人:翟慧杰).ppt
- 吉林大学:《Windows程序设计》课程电子教案(PPT课件)Windows程序设计教学课件(1/2,主讲人:翟慧杰).ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第四章 栈和队列.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第六章 树.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第五章 数组、字符串、集合类.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第二章 面向对象程序设计与C++语言.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第八章 排序.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第三章 线性表.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第七章 图.ppt
- 吉林大学:《数据结构》课程电子教案(PPT课件)第一章 绪论(主讲人:徐沛娟).ppt
- 《数据库管理及应用》课程电子教案(PPT课件)6.04 Normal Form of Relation 关系规范化.ppt
- 《数据库管理及应用》课程电子教案(PPT课件)6.03 Introduction to Normal Form of relation 关系规范化导论.ppt
- 《数据库管理及应用》课程电子教案(PPT课件)6.02 Armstrong 公理体系.ppt
- 《数据库管理及应用》课程电子教案(PPT课件)6.01 Dependency of Data 数据库相关性.ppt
- 《数据库管理及应用》课程电子教案(PPT课件)5.09 Concurrent Control Based Time Stamp 基于时间标记的并发控制技术.ppt
- 《数据库管理及应用》课程电子教案(PPT课件)5.08 Multiple Granularity Locking 多粒度封锁.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第三章 图形变换 第四节 三维图形变换.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第二章 图形基元的显示 第四节(2/2).ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第二章 图形基元的显示 第二节 圆的扫描转换算法 第三节 区域填充算法.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第三章 图形变换 第五节 投影.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第四章 曲线和曲面 第一节 曲线和曲面表示的基础知识 第二节Hermite多项式.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第四章 曲线和曲面 第四节 Bezier曲线和曲面.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第四章 曲线和曲面 第三节 Coons曲面.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第四章 曲线和曲面 第五节 B样条曲线和曲面.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第一节 线段的交点计算.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第四章 曲线和曲面 第四节(2/2).ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第三章 图形变换 第六节 裁剪.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第五节(2/2).ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第六章 形体的表示及其数据结构 第二节(2/2).ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第六章 形体的表示及其数据结构 第一节 图形的分段表示 第二节 二维形体的表示.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第六章 形体的表示及其数据结构 第三节 四叉树 第四节 三维几何模型.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第五节 简单多边形的三角剖分.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第二节 多边形表面的交线计算.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第四节 包含与重叠.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第五章 图形运算 第三节 平面中的凸壳算法.ppt
- 吉林大学:《计算机图形学》课程电子教案(PPT课件)第八章 真实感图形的绘制 第六节 光线跟踪 第七节 辐射度方法 第八节 色彩模型.ppt