关于作者

网络推荐

2.3.3 种子填色算法

上一篇 / 下一篇  2007-04-07 10:46:16 / 个人分类:还电脑一片纯洁

2.3.3 种子填色算法

种子填色又称边界填色(Boundary Filling)。它的功能是:给出多边形光栅化后的边界位置及边界色代码boundary,以及多边形之内的一点x, y位置,要求将颜色color填满多边形。电脑爱好者网;Q!~ U(KP#z!z9f;`:L

通常采用的填法有两种:四邻法(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)所示的边界,按八邻法就会将色彩涂出多边形。由于填不满往往比涂出更易于补救,因此四邻法比八邻法用的更普通。电脑爱好者网.RRE0_Ao"R(S#vc

四邻法种子填色基本程序如程序2.3.2所示。这种程序书写简洁,但运行效率不高,因为包含有多余的判断。在它的基础上可以写出各种改进的算法[8]。

U*@NT(~'H0}0

void seed_filling (x, y, fill_color, boundary_color)

_8^sd`1j6Y8^0

int x, y, fill_color, boundary_color;

$@ZC7R Q1s5p0

{

3n\]oUwE;Is0

int c;电脑爱好者网R0lcUm"k*[ f

c=inquire_color(x, y);

tHyUo{0

if((c< > boundary_color) && (c< > fill_color))电脑爱好者网Q'H;Y`]6TG

{

,K8xxES0

set_pixel(x, y, fill_color);

UUtfQw)i0

seed_filling(x+1, y, fill_color, boundary_color);

)|)E9qS4Vbug0

seed_filling(x-1, y, fill_color, boundary_color);

H#bx)Eah0

seed_filling(x, y+1, fill_color, boundary_color);电脑爱好者网)UkJ2nJ"~/w5t \"@3X

seed_filling(x, y-1, fill_color, boundary_color);电脑爱好者网|y+e!p(}7~5H

}电脑爱好者网#Eh U9pp5]

}电脑爱好者网`x3U9df E V%BG

 电脑爱好者网c;h]QN

                    程序2.3.2 四邻法种子填色程序电脑爱好者网 a}*Y:t6aT

                         2_3_6.gif (4035 bytes)电脑爱好者网(s'k&A%m bZ:Y0Y1]YD

                                               图2.3.6 四邻法和八邻法种子

zKG5o^9hw(M0
  1. 四邻法

    #F}2_.Wb$}2G0
  2. 四邻法不能填满此多边形

    ]K.k6nU"g%{)FG0
  3. 八邻法

    ;NRv)Z6|z0
  4. 八邻法会涂出此多边形

    $k(j#}&a:hl2]"~0M V"anq0

 电脑爱好者网&rEnr Pg2q#h


TAG: 还电脑一片纯洁

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)