Здравствуйте, vit_as, Вы писали:
_>Здравствуйте, revaldo666, Вы писали:
R>>С этим я сегодня и столкнулся, на изображении свыше 100х100 переполняется стэк. Однако как тогда обойти пиксели картинки?
R>>Вот как сделал я
R>>R>> private void checkImage(int r,int e,Bitmap img,ref bool[,] ch)
R>> {
R>> if (e < 0 || r < 0 || r>=img.Width ||e>=img.Height)
R>> return;
R>> if (ch[r, e] == true)
R>> return;
R>> ch[r, e] = true;
R>> checkImage(r + 1, e,img, ref ch);
R>> checkImage(r, e+1,img, ref ch);
R>> checkImage(r - 1, e,img, ref ch);
R>> checkImage(r, e-1,img, ref ch);
R>> }
R>>
_>Создаете бинарное изображение, т.е. изображение состоящее из 0 (фон) и 1 (объекты). На вашем рисунке фон белый, объекты черные и красные.
_>Пробегаете по картинке слева направо, сверху вниз. Как только встречается переход с фона на объект, начинаете обход контура, координаты точек контура пишете в лист, на бинарном помечаете -1 те точки, которые вы обошли, чтобы второй раз к ним не возвращаться, никаких рекурсий здесь не надо.
Картинка не чёрно -бело-красная, там идёт градация серого, та картинка для примера была.
Раньше немного большой портрет. Но как я понял принцип тот-же.