gpt4 book ai didi

c# - C# 中的油漆桶函数代码,运行时挂起,

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:03 28 4
gpt4 key购买 nike

我尝试将堆栈类用于油漆桶功能,但是当运行并单击图片框中的选定区域以填充选定颜色时,没有任何反应并且 cpu 使用率上升到 %100 并且系统挂起!下面是代码,首先是选择这个功能的图片框代码,点击后调用填充功能:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{

if (act == "color")
{

fill(bmp ,e.X, e.Y, bmp.GetPixel(e.X, e.Y));
pictureBox1.Image = bmp;

}

}

============================和 fill 功能不起作用!

private void fill(Bitmap picture, int x, int y, Color bcolor)
{

if (x > 0 && x < picture.Width && y > 0 && y < picture.Height)
{

Point p = new Point(x, y);
Stack<Point> s = new Stack<Point>();
s.Push(p);
while (s.Count > 0)
{
p = s.Pop();
Color currentcolor = picture.GetPixel(p.X, p.Y);
if (currentcolor == bcolor)
{
//this.Refresh();
picture.SetPixel(p.X, p.Y, currentcolor);
s.Push(new Point(p.X - 1, p.Y));
s.Push(new Point(p.X + 1, p.Y));
s.Push(new Point(p.X, p.Y - 1));
s.Push(new Point(p.X, p.Y + 1));
}

}
}

}

有解决这个问题的想法吗?谢谢

---实际上我删除了“this.Refresh()”代码,但结果还是一样,没有任何改变!那么,有什么纠正或更好的油漆桶代码的建议吗?

最佳答案

你不能只调用这个:

                    s.Push(new Point(p.X - 1, p.Y));
s.Push(new Point(p.X + 1, p.Y));
s.Push(new Point(p.X, p.Y - 1));
s.Push(new Point(p.X, p.Y + 1));

...不检查每个 p.X +/- 1 && p.Y +/- 1 是否在 Bitmap 的范围内,否则对于弹出的每个像素,您将插入 4。这将增加堆栈,直到内存耗尽。

this.Refresh() 可能使代码运行速度如此之慢,以至于您看不到实际内存用完 - 因此 100% CPU。您应该删除 this.Refresh(),因为您的 UI 在 fill 方法完成之前无法更新。

关于c# - C# 中的油漆桶函数代码,运行时挂起,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865402/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com