Đây là triển khai C# của tôi về thuật toán lấp đầy dựa trên stack (dựa trên định nghĩa của wikipedia). Trước đó trong khi viết mã, tôi chỉ muốn thấy nó hoạt động. Và nó đã làm. Sau đó, tôi muốn biết số lượng pixel thực sự là được điền. Vì vậy, trong mã của tôi, tôi đã thay đổi kiểu trả về thành int và trả lại biến số "ctr". Nhưng sau đó ctr hóa ra là xấp xỉ gấp đôi số pixel thực tế (tôi đã thực hiện một chức năng riêng biệt với mục đích duy nhất là đếm các pixel đó - chỉ để biết chắc chắn).Thực hiện Flood Fill
Bất kỳ ai có thể khai sáng về cách thức và lý do biến số "ctr" được tăng gấp đôi số tiền phải có?
* Pixel lớp chỉ đóng vai trò là vùng chứa cho các giá trị x, y và màu của pixel từ bitmap.
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;
}
Nếu 'ctr' có nghĩa là' truy cập', không có gì sai khi gọi nó là 'truy cập'. –