這是我的基於堆棧的洪水填充算法(我基於維基百科定義)的C#實現。在編碼之前,我只想看看它的工作原理。它確實如此。然後,我想知道實際上填充的像素數。所以在我的代碼中,我將返回類型更改爲int並返回了變量「012」。但是然後ctr竟然約爲實際填充像素數的兩倍(我做了一個單獨的功能,唯一的目的是計算這些像素 - 只是爲了確定)。洪水填充實現
任何人都可以啓發如何以及爲什麼變量「ctr」增加兩倍,因爲它應該有?
* 像素類僅用作位圖像素的x,y和顏色值的容器。
public Bitmap floodfill(Bitmap image, int x, int y, Color newColor)
{
Bitmap result = new Bitmap(image.Width, image.Height);
Stack<Pixel> pixels = new Stack<Pixel>();
Color oldColor = image.GetPixel(x, y);
int ctr = 0;
pixels.Push(new Pixel(x, y, oldColor));
while (pixels.Count > 0)
{
Pixel popped = pixels.Pop();
if (popped.color == oldColor)
{
ctr++;
result.SetPixel(popped.x, popped.y, newColor);
pixels.Push(new Pixel(popped.x - 1, popped.y, image.GetPixel(x - 1, y));
pixels.Push(new Pixel(popped.x + 1, popped.y, image.GetPixel(x + 1, y));
pixels.Push(new Pixel(popped.x, popped.y - 1, image.GetPixel(x, y - 1));
pixels.Push(new Pixel(popped.x, popped.y + 1, image.GetPixel(x, y + 1));
}
}
return result;
}
如果'ctr'的意思是'counter',那麼稱它爲'counter'沒什麼問題。 –