Или Проще какой алгоритм метода fillpolygon ?
Есть программа, выдает контур изображения, допустим находит лицо, и надо его вырезать на белый фон, контур это массив последовательных точек по часовой стрелки. Нужно наложить этот контур на изображение, и вырезать все пиксели под ним? Контур может быть очень очень очень сложным. К примеру в виде змейки.
У меня как не пытался не получается.
Мой алгоритм.
1. Создаю новый массив [y][x] заношу в него точки контура. (Это думаю при любой реализации)
2. Тут прохожу сверху вниз, слева на права, и жду когда найдется первая точка контура, тогда до следующей точки закрашиваю их.
3. Как только снова точка, то перестаю окрашивать, и так до следующий.
Проблемы, когда Пиковые, ^ V образные и когда точки друг за другом идут.
Есть функция в библиотеках FillPolygon Как она работает??? По сути мой контур это полигон последовательных точек. И мне нужно их закрасить.
Такая штука(а ее уже пытался усложнить в разы не помогло), не работает с последовательными точками, к примеру (10,11) (10,12) (10,13) и с точками пика.
for (int i = 0; i < contour.Lenght; i++)
{
pixelsContour[contour.Points[i].Y - contour.Y1][contour.Points[i].X - contour.X1] = color;
}
for (int y = 0; y < dy; y++)
{
bool isOpenX = false;
for (int x = 0; x < dx; x++)
{
if (isOpenX)
{
if(pixelsContour[y][x] == color)
{
isOpenX = false; /// закрыть
}
else
{
pixelsContour[y][x] = color;
}
}
else
{
if (pixelsContour[y][x] == color)
isOpenX = true;
}
}