do // loop around the border
{ // until returned to starting pixel
nextFound = findNextPixel ();
done = (currentPixel.x == startX) && (currentPixel.y == startY);
} while ( nextFound && Idone );
if (InextFound )// if only one pixel in border { // add it twice to the table
appendBPList ( startX, startY, UNBLOCKED );
appendBPList ( startX, startY, UNBLOCKED );
}
else // if last search direction was upward
// add the starting pixel to the table if ((prevD <= 3) && (prevD >= 1))
appendBPList ( startX, startY, UNBLOCKED );
}
void borderFill (int x, int y )
{
do // do until entire table
{ //is skanned
traceBorder ( x, y ); // trace border startint at x,y sortBP (); // sort border pixel table
scanRegion ( x, y ); // look for holes in the interior
} while ( bpStart < bpEnd );
fillRegion (); // use the table to fill the interior

6. Растровые алгоритмы

Процедура п'асеВогёег создает таблицу всех граничных пикселов области, которая затем сортируется по возрастанию координат .х и у процедурой богіВР. После этого процедура $сапЯе£Іоп проверяет внутренний отрезок прямой между каждой парой граничных пикселов из таблицы. Если в отрезке обнаруживается граничный пиксел, то процедура полагает, что в области найдено отверстие, и возвращает координаты обнаруженного граничного пиксела для того, чтобы процедуры ІгасеВогсІег и богтВР могли внести в таблицу координаты точек границы этого отверстия. После того как будет обследована вся внутренность области, процедура їіПІІе§іоп осуществляет заполнение области на основе построенной таблицы.

Процедура ІгасеВогеег начинает работу с заданного пиксела на правой границе области и движется вдоль границы по часовой стрелке, при этом внутренность области всегда лежит справа. Если пиксел не соседствует с внутренней частью области, то алгоритм его граничным не считает. Так как алгоритм всегда проверяет первыми пикселы, лежащие справа по направлению движения, то все обнаруженные им граничные пикселы действительно прилегают к внутренней области. Подробнее об этом алгоритме можно прочитать в [11].


⇐ Предыдущая| |Следующая ⇒