试图找到矩形的顶点。我找到了第一个顶点并将其存储在变量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.
答案 0 :(得分:0)
您的代码发现x2好的。好吧,差不多。您在最里面的循环中的条件应该是和(&&
)而不是或(||
)。第二个错误在某种程度上有利于第一个,但这不是可行的方式......
第二个错误是你没有正确地从你的内循环中break
。
注意:在C#中,break
命令只会突破最里面的循环。
(这是k-loop;它肯定是一个undefinend变量?)
如果你想进一步突破,需要以其他方式去做。如何做到最好的讨论是陈旧的,非常情绪化的。有些人建议将下一个循环的循环条件设置为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 + ")")