查找矩形的顶点

时间:2014-05-30 21:20:39

标签: c# winforms

试图找到矩形的顶点。我找到了第一个顶点并将其存储在变量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.

1 个答案:

答案 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 + ")")