Не очень элегантное решение, но вот моя первая попытка.
if( direction == BORDER_SEARCH_DIRECTION.TOP ||
direction == BORDER_SEARCH_DIRECTION.BOTTOM )
{
for (int y = startY; y >= 0 && y < _image.Height; y += deltaY)
{
bool foundNonWhite = false;
for (int x = startX; x < _image.Width; x += deltaX)
{
if (Convert.ToInt32(_image.ManagedArray.GetValue(y, x, 0)) < BORDER_WHITENESS_THRESHOLD)
{
foundNonWhite = true;
break;
}
}
if (!foundNonWhite)
{
borderAt = y;
break;
}
}
}
По сути, это предполагает, что граница начинается не более чем на пятой части изображения сверху / снизу, ион ищет первый ряд, который полностью «белый».Я запускаю процедуру дважды, и если я обнаруживаю целый ряд белых сверху и снизу изображения, я предполагаю, что у нас есть граница.
Чертова вещь занимает 250 миллисекунд.