यह एक स्टैक-आधारित बाढ़ भरने वाले एल्गोरिदम का मेरा सी # कार्यान्वयन है (जिसे मैं विकिपीडिया की परिभाषा पर आधारित करता हूं)। कोडिंग करते समय, मैं केवल इसे देखना चाहता था। और यह किया। फिर, मैं पिक्सेल की संख्या जानना चाहता था जो वास्तव में भर गया था। तो मेरे कोड में, मैंने वापसी प्रकार को int में बदल दिया और "ctr" चर लौटा दिया। लेकिन फिर सीआरटी भरने वाले पिक्सेल की वास्तविक संख्या लगभग दोगुना हो गया (मैंने उन पिक्सल को गिनने के एकमात्र उद्देश्य के साथ एक अलग कार्य किया - बस कुछ जानने के लिए)।बाढ़ भरने के कार्यान्वयन
कोई भी कैसे और क्यों परिवर्तनीय "ctr" को दो बार बढ़ाया जाना चाहिए?
* पिक्सेल कक्षा केवल बिटमैप से पिक्सल के एक्स, वाई, और रंग मानों के लिए एक कंटेनर के रूप में कार्य करती है।
if (popped.color == oldColor)
लेकिन popped.color हो सकता है (और apperently मामलों के 50% में है) पुरानी:
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' साथ कुछ भी गलत नहीं है। –