最近要写个winform的图像处理 现在的目的是将多边形内填充上颜色,我用的方法就是网上最多的种子法我的代码是:
public void fushi(int x,int y)
{
if (img.GetPixel(x, y) != biankuangcolor&&img.GetPixel(x, y) != tianchongcolor)
{
img.SetPixel(x, y, Color.Red);
//pictureBox1.Image = img;
//pictureBox1.Refresh();
fushi(x-1, y);
fushi(x +1, y);
fushi(x, y - 1);
fushi(x, y + 1);
}
}
然后在主程序中找个种子点引用 !
我试了当填充小图像是没有问题,但是填充大图像会报错!
报堆栈溢出 !我查了老赵的关于尾递归的博文 但是不知道这种算法怎么实现尾递归!
请问各位大侠有没有其他方法或是如何实现尾递归?
为什么一定要递归,直接循环不可以吗?
public void fushi(int x,int y)
{
if (img.GetPixel(x, y) != biankuangcolor&&img.GetPixel(x, y) != tianchongcolor)
{
img.SetPixel(x, y, Color.Red);
//pictureBox1.Image = img;
//pictureBox1.Refresh();
fushi(x-1, y);
fushi(x +1, y);
fushi(x, y - 1);
fushi(x, y + 1);
}
}
既然是报堆栈溢出,肯定是递归的没边了...哈哈..最起码在你的递归中,你得满足点是在你的图形范围内的条件啊。