求矩形的顶点

本文关键字:顶点 | 更新日期: 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 + ")")