求矩形的顶点
本文关键字:顶点 | 更新日期: 2023-09-27 18:06:04
尝试找到矩形的顶点。我找到了第一个顶点,并将它存储在变量x1,y1中,但是当我试图找到第二个顶点x2时,我找不到它。
目前的代码是
private void process(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(pictureBox1.Image);
int set = 0;
for (int i = 0; i < bmp.Height; i++)
{
for (int j = 0; j < bmp.Width; j++)
{
Color p = bmp.GetPixel(j, i);
if (set < bmp.Width && p.R < 10)
{
x1 = j;
y1 = i;
for (k = x1; k < bmp.Width; k++)
{
set++;
if (bmp.GetPixel(k, i).R < 10 || bmp.GetPixel(k + 1, i).R > 200)
{
x2 = k;
bmp.SetPixel(k, i, Color.Red);
break;
}
}
}
}
}
pictureBox1.Image = bmp;
MessageBox.Show("(" + x2 + ")");
} //end class process.
您的代码找到x2 。嗯,差不多。在最内层循环中的条件应该是和 (&&
),而不是或 (||
)。第二个错误在某种程度上弥补了第一个错误,但这不是正确的方法。
第二个错误是您没有正确地将break
从内循环中取出。
注意:在c#中break
命令只打破最内层的循环。
(其中为k环;哪一个是未定义变量?)
如果你想进一步突破,你需要用其他的方式来做。关于如何做到最好的讨论由来已久,而且相当情绪化。一些人建议将下一个循环的循环条件设置为false,另一些人建议使用goto
, c#中就包含了这种情况。(还有一两个…)
我认为在这种情况下,goto
是最干净和最简单的解决方案,因为它说它做什么,而不需要调整循环变量或引入更多的变量。
这是你要修改的部分代码:
if (bmp.GetPixel(k, i).R < 10 && bmp.GetPixel(k + 1, i).R > 200)
{
x2 = k;
bmp.SetPixel(k, i, Color.Red);
goto loop1;
}
}
}
}
}
loop1:
pictureBox1.Image = bmp;
MessageBox.Show("(" + x2 + ")")