您的位置:电脑爱好者网
» 任庆亮--first
» 日志
2.3.3 种子填色算法
上一篇 /
下一篇 2007-04-07 10:46:16
/ 个人分类:还电脑一片纯洁
2.3.3 种子填色算法
种子填色又称边界填色(Boundary Filling)。它的功能是:给出多边形光栅化后的边界位置及边界色代码boundary,以及多边形之内的一点x, y位置,要求将颜色color填满多边形。
8Fg4ahz0
通常采用的填法有两种:四邻法(4-connected)和八邻法。四邻法是已知x, y(图2.3.6(a)的黑色象素)是多边形内的一点,据此向上下左右四个方向测试(图2.3.6(a)中打勾的象素)、填色、扩散。四邻法的缺点是有时不能通过狭窄区域,因而不能填满多边形。如图2.3.6(b)所示,左下角方形中的种子(打点的象素)不能扩散到右上角的方形中,因为采用四邻法通不过中间的狭窄区域。八邻法是已知x, y(图2.3.6 (c)中黑色的象素)为多边形内的一点,即种子,据此可向周围的八个方向(图2.3.6(c)中打勾的象素)测试、填色、扩散。八邻法的缺点是有时要填出多边形的边界。如图2.3.6(d)所示的边界,按八邻法就会将色彩涂出多边形。由于填不满往往比涂出更易于补救,因此四邻法比八邻法用的更普通。
&nbi7k#nIJ0
四邻法种子填色基本程序如程序2.3.2所示。这种程序书写简洁,但运行效率不高,因为包含有多余的判断。在它的基础上可以写出各种改进的算法[8]。电脑爱好者网3Q1}&~} __lE4`
void seed_filling (x, y, fill_color, boundary_color)电脑爱好者网~i"e[!}
int x, y, fill_color, boundary_color;电脑爱好者网 Y-q2HHw\N
{
Y)@:Y'D`2P9f0
int c;电脑爱好者网7DM(xQ.}[#G
c=inquire_color(x, y);
FJf1iv0
if((c< > boundary_color) && (c< > fill_color))电脑爱好者网h%[RG"Z{&J#g%V
{
-u~_:k
_ x4W!}0
set_pixel(x, y, fill_color);
W!@U,x0jU{0
seed_filling(x+1, y, fill_color, boundary_color);
|.AjUN.zm
K0
seed_filling(x-1, y, fill_color, boundary_color);电脑爱好者网&W yHSF\.M
seed_filling(x, y+1, fill_color, boundary_color);
} m:u2lY+PUW
F0
seed_filling(x, y-1, fill_color, boundary_color);电脑爱好者网] N?*BipI
}电脑爱好者网_0UC@6m0Wb6]
}电脑爱好者网1E#d;{O?0I:| K:Q
电脑爱好者网b:T Qo\\aR
程序2.3.2 四邻法种子填色程序电脑爱好者网!Ia-Bq;]

)w1U)UQ\B0
图2.3.6 四邻法和八邻法种子
a7D\pBM7O0
-
四邻法
s5|o!QN0
-
四邻法不能填满此多边形 电脑爱好者网l;wS3E
W;~h
-
八邻法 电脑爱好者网fcm;b9J5r4zC(J
-
八邻法会涂出此多边形
qZ'@gx7B w-h0
电脑爱好者网\Y`&k3U@i"^o
相关阅读:
- 注册表详情 (任庆亮, 2007-1-09)
- 注册表详情补充 (任庆亮, 2007-1-09)
- 注册表详情补充 (任庆亮, 2007-1-09)
- 第一章 计算机图形学和图形系统基本知识 (任庆亮, 2007-4-07)
- 第二章 基本图形的生成与计算 (任庆亮, 2007-4-07)
- 直线的Bresenham算法 (任庆亮, 2007-4-07)
- 圆的生成算法 (任庆亮, 2007-4-07)
- 2.2.2 圆的Bresenham算法 (任庆亮, 2007-4-07)
- 2.3 区域填充算法 (任庆亮, 2007-4-07)
- 2.3.2 扫描线填色算法 (任庆亮, 2007-4-07)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
还电脑一片纯洁