Скачиваний:
81
Добавлен:
09.05.2014
Размер:
684.54 Кб
Скачать

Алгоритм со списком ребер и флагом.

Это двух шаговый алгоритм:

  1. Обрисовка контура. Результат: на каждой сканирующей строке образуются пары ограничивающих пикселей.

  2. Закрашивание пикселей, расположенных между ограничивающими пикселями.

Более подробно:

  1. Обрисовка контура. Используется соглашение о середине интервала между сканирующими строками для каждого ребра, пересекающего сканирующие строки. Отметить самый левый пиксель, центр которого лежит справа от пересечения, то есть Х=Хпересечения+0,5.

  2. Заполнение. Для каждой сканирующей строки, пересекающей МУ.

ВНУТРИ=FALSE

FOR Х=0 (левая граница) TO Х=Хmax (правая граница)

IF пиксель в точке Х имеет граничное значение

THEN инвертировать значение переменной ВНУТРИ

IF ВНУТРИ=TRUE

THEN присвоить пикселю в Х значение цвета многоугольника

ELSE присвоить пикселю в Х значение цвета фона

END IF

NEXT X

Р

езультат обрисовки третей строки:

Результат закраски третей строки:

Алгоритмы заполнения (закраски) с затравкой.

Внутренне – определенная область (все пиксели, принадлежащие внутренней части имеют один и тот же цвет, а все внешние пиксели – другие цвета).

Гранично-определенная область (Все пиксели на границе области имеют заданный цвет, ни один пиксель внутри области не может иметь этот цвет).

Алгоритмы заполнения внутренней области называются внутренне заполняющими алгоритмами, а граничные области – гранично заполняющими алгоритмами.

Области заполнения могут быть 4х связными и 8ми связными. Если область 4х связная, то любого пикселя в этой области можно достичь с помощью комбинации возможного движения только в 4х направлениях (←↑→↓). Для 8ми связных областей появляются 4 движения дополнительно (← \ ↑ / → \ ↓ /).

Примеры внутренне – определенных областей:

Простой алгоритм закраски с затравкой

(4х-связный, гранично-определенный).

Используется стек (FILO).

Поместить затравочный пиксель в стек.

Пока стек не пуст:

Извлечь пиксель из стека.

Закрасить пиксель.

Для каждого из соседних к текущему 4х-связных пикселей проверить:

Является ли он граничным пикселей или уже закрашенным? В любом из этих двух случаев проигнорировать пиксель, в противном случае поместить пиксель в стек.

Пример: в примере проверяются и помещаются в стек 4х-связные пиксели, начиная с правого от текущего пикселя против часовой стрелки, то есть порядок→↑←↓.

Недостаток: требуется большой стек (память в виде цеха).

Достоинство: можно закрашивать 4х-связные области любой сложности.

Построчный алгоритм закраски с затравкой.

Также используется стек, но он выглядит следующим образом:

  1. Определяется затравочный пиксель, который заносится в стек и пока стек не пуст, пиксель извлекается из стека.

  2. Пиксель закрашивается, и закрашиваются все пиксели на сканирующей строке влево от текущего пикселя, а потом вправо.

  3. В переменных Хлевое и Хправое запоминаются координаты крайнего левого и крайнего правого пикселей интервала закрашенной строки. В диапазоне Хлевое ≤ Х ≤ Хправое проверяются строки, расположенные непосредственно над и под текущей строкой. Определяется, есть ли на них еще не закрашенные пиксели. Если есть незакрашенные пиксели, то в указанном диапазоне крайний правый пиксель, например в каждом интервале, отмечается как затравочный и помещается в стек.

15.11.02

Лекция 10.

Соседние файлы в папке конспект лекций