1
我目前正在爲練習創建一個小油漆程序。現在我正在嘗試做油漆桶工具,或者換句話說就是填充水。有趣的是:如果需要填充的像素數量很少,一切正常。如果填充像素的仇恨數量較高,它會給我一個SO-Exception。這裏是我的代碼:StackOverflow在我的洪水填充
private void FloodFill(Bitmap picture, int x, int y)
{
if (x <= 0 || y <= 0 || x >= DrawingPanel.Width || y >= DrawingPanel.Height)
{
return;
}
if (picture.GetPixel(x, y) != löschFarbe)
{
return;
}
if (picture.GetPixel(x, y) == löschFarbe)
{
picture.SetPixel(x, y, ColorButton.BackColor);
}
FloodFill(picture, x + 1, y);
FloodFill(picture, x, y + 1);
FloodFill(picture, x - 1, y);
FloodFill(picture, x, y - 1);
FloodFill(picture, x + 1, y + 1);
FloodFill(picture, x - 1, y + 1);
FloodFill(picture, x + 1, y - 1);
FloodFill(picture, x - 1, y - 1);
}
「löschFarbe」是被點擊的顏色(這將被刪除/覆蓋另一種顏色)
錯誤發生:如果我要填寫完整的圖片或大空間,我在這裏得到一個錯誤:
if (picture.GetPixel(x, y) != löschFarbe)
{
return;
}
任何人都知道我可以解決這個問題嗎?
順便說一句,這是我的節目的圖象:
由於'FloodFill'自己調用了太多次,你會得到堆棧溢出異常。考慮圖像中有多少像素,然後考慮點擊圖像中心時調用FloodFill的次數。它調用'FloodFill',然後在第一個相鄰像素上調用'FloodFill',並且這個像素一樣,一遍又一遍。 – dreamlax
由於'GetPixel'方法沒有足夠的堆棧空間才能正常工作,因此您在其他地方發生錯誤。你需要重新思考如何使用循環而不是遞歸進行洪泛填充。 – dreamlax
Geez 8點指數,1 - 8 - 64 -512 - 4096 - 32768,難怪你有堆棧溢出!多數民衆贊成深入6 0.o – RhysW