关于作者

网络推荐

2.3.3 种子填色算法

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

2.3.3 种子填色算法

种子填色又称边界填色(Boundary Filling)。它的功能是:给出多边形光栅化后的边界位置及边界色代码boundary,以及多边形之内的一点x, y位置,要求将颜色color填满多边形。

8Fg4ah z0

通常采用的填法有两种:四邻法(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 yH SF\.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;]

                         2_3_6.gif (4035 bytes)

)w1U)UQ\B0

                                               图2.3.6 四邻法和八邻法种子

a7D\pBM7O0
  1. 四邻法

    s5|o!QN0
  2. 四邻法不能填满此多边形 电脑爱好者网l;wS3E W;~h

  3. 八邻法 电脑爱好者网fcm;b9J5r4zC(J

  4. 八邻法会涂出此多边形

    qZ'@gx7B w-h0

 电脑爱好者网\Y`&k3U@i"^o


TAG: 还电脑一片纯洁

 

评分:0

我来说两句

显示全部

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