洪水填充算法_洪水填充算法分析

循环。

Stack st = new Stack();

bool spLeft, spRight;

Bitmap b = canvas.buffer;

st.Push(start);

spLeft = spRight = false;

Point p = new Point();

while (st.Count > 0)

{

//going as far top as possible (finding first obstacle)

p = st.Pop();

while (p.Y >= 0 && b.GetPixel(p.X, p.Y) == oldColor) p.Y--;

p.Y++;

spLeft = spRight = false;

//looping on every oldColored pixel in column

while (p.Y < b.Height && b.GetPixel(p.X, p.Y) == oldColor) {

b.SetPixel(p.X, p.Y, state.currentColor); //setting new color

//checking if left pixel is oldColored and if it doesn't belong to span

if (!spLeft && p.X > 0 && b.GetPixel(p.X - 1, p.Y) == oldColor) {

st.Push(new Point(p.X - 1, p.Y));

spLeft = true;

}

//checking if left pixel isn't oldColored and if it belongs to span

else if (spLeft && p.X > 0 && b.GetPixel(p.X - 1, p.Y) != oldColor) {

spLeft = false;

}

if (!spRight && p.X < b.Width - 1 && b.GetPixel(p.X + 1, p.Y) == oldColor) {

st.Push(new Point(p.X + 1, p.Y));

spRight = true;

}

else if (spRight && p.X < b.Width - 1 && b.GetPixel(p.X + 1, p.Y) != oldColor) {

spRight = false;

}

p.Y++;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值