Должно быть просто найти эту точку с помощью двух петель, аналогично той, что у вас есть.Сначала определите ваши переменные:
//from http://www.artofproblemsolving.com/Wiki/images/a/a3/Convex_polygon.png
Image image = Image.FromFile(@"C:\Users\Jacob\Desktop\Convex_polygon.png");
Bitmap bitmap = new Bitmap(image);
Point maxPoint = new Point(0, 0);
Size maxSize = new Size(0, 0);
Затем я бы порекомендовал вызывать GetPixel
только один раз на пиксель и кэшировать результаты в массиве (это может быть смещением, когда мне пришлось использовать APIвызовите, чтобы получить пиксель, но с ним будет легче работать):
Color[,] colors = new Color[bitmap.Width, bitmap.Height];
for (int x = 0; x < bitmap.Width; x++)
{
for (int y = 0; y < bitmap.Height; y++)
{
colors[x, y] = bitmap.GetPixel(x, y);
}
}
Далее приведен простой код для получения максимальной высоты и X первой точки с этой высотой:
Color shapeColor = Color.FromArgb(245, 234, 229);
for (int x = 0; x < bitmap.Width; x++)
{
int lineHeight = 0;
for (int y = 0; y < bitmap.Height; y++)
{
if (colors[x, y] == shapeColor) // or TestColour(colors[x, y])
lineHeight++;
}
if (lineHeight > maxSize.Height)
{
maxSize.Height = lineHeight;
maxPoint.X = x;
}
}
Вы можете сделать аналогичный цикл для каждого y, чтобы найти максимальную ширину.
Важный момент: ваш вопрос не определен для вогнутых фигур - на вогнутых формах у вас будет списоквысоты для каждого x, и линия максимальной высоты не может пересекать максимальную ширину.Даже на выпуклых формах у вас может быть более одного ответа: простым примером этого является прямоугольник.