C# 填充任意封闭图形
来源:百度知道 编辑:UC知道 时间:2024/05/31 20:22:18
我要写一个画图软件,在做“填充工具”的时候遇到了问题,一旦填充大图形就会出现System.StackOverflowException的错误,高手帮帮忙,我是用递归写的,有没有不用递归或者更好的方法,先谢谢啦。
private void FindFill(Point Start, ref Image image, Color Fill)
{
Bitmap b = (Bitmap)image;
b.SetPixel(Start.X, Start.Y, Fill);
if (psl == 0) goto cl;
for (int i = 0; i < psl + 1; i++)
{
if (Start == ps[i]) return;
}
cl: { }
ps[psl] = new Point(Start.X, Start.Y);
psl++;
if (Start.X == 0 || Start.Y == 0) return;
if (Start.X == picImage.Width - 1 || Start.Y == picImage.Height - 1) return;
if (b.GetPixel(Start.X, Start.Y - 1).Name == BaseColor)
{
FindFill(new Point(Start.X, Start.Y - 1), ref image, Fill);
}
if (b.GetPixel(Start.X, Start.Y
private void FindFill(Point Start, ref Image image, Color Fill)
{
Bitmap b = (Bitmap)image;
b.SetPixel(Start.X, Start.Y, Fill);
if (psl == 0) goto cl;
for (int i = 0; i < psl + 1; i++)
{
if (Start == ps[i]) return;
}
cl: { }
ps[psl] = new Point(Start.X, Start.Y);
psl++;
if (Start.X == 0 || Start.Y == 0) return;
if (Start.X == picImage.Width - 1 || Start.Y == picImage.Height - 1) return;
if (b.GetPixel(Start.X, Start.Y - 1).Name == BaseColor)
{
FindFill(new Point(Start.X, Start.Y - 1), ref image, Fill);
}
if (b.GetPixel(Start.X, Start.Y
用更高效的扫描线填充算法。
http://course.cug.edu.cn/cugFirst/computer_graphics/class/course/2-3-2-a.htm
这个是讲解。
想要我的代码的话请发邮件给我kqwd@163.com
你这种做法,肯定会StackOverflow的啊。
.NET 里面的 GDI+ 提供现成的方法,你要注意使用啊
http://msdn.microsoft.com/zh-cn/library/system.drawing.graphics.fillclosedcurve.aspx
你这种做法,肯定会StackOverflow的啊。