Исследование алгоритмов заливки изображений

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.06.2011
Размер файла 165,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

КУРСОВАЯ РАБОТА

Исследование алгоритмов заливки изображений

Содержание

Введение

1. Алгоритмы растровой графики

1.1построчное заполнение

1.2 сортировка методом распределенного расчета

1.3 заливка области с затравкой

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

2. Алгоритмы векторной графики

2.1заливка основным цветом

2.2 текстурная заливка

2.3 заливка изображением-узором (картой)

2.4 градиентная заливка

3. Процедура заполнения

Заключение

Библиографический список

Приложение 1

Введение

Машинная графика в настоящее время уже вполне сформировалась как наука. Существует аппаратное и программное обеспечение для получения разнообразных изображений - от простых чертежей до реалистичных образов естественных объектов. Машинная графика используется почти во всех научных и инженерных дисциплинах для наглядности восприятия и передачи информации. Знание её основ в наше время необходимо любому ученому или инженеру. Машинная графика властно вторгается в бизнес, медицину, рекламу, индустрию развлечений. Применение во время деловых совещаний демонстрационных слайдов, подготовленных методами машинной графики и другими средствам автоматизации конторского труда, считается нормой. В медицине становится обычным получение трехмерных изображений внутренних органов по данным компьютерных томографов. В наши дни телевидение и другие рекламные предприятия часто прибегают к услугам машинной графики и компьютерной мультипликации. Использование машинной графики в индустрии развлечений охватывает такие несхожие области как видеоигры и полнометражные художественные фильмы.

На сегодняшний день создано большое количество программ, позволяющих создавать и редактировать трёхмерные сцены и объекты. Среди наиболее популярных можно назвать такие как 3D studio Max, которая позволяет трёхмерные компьютерные ролики. Область её применения в основном реклама, мультипликация и оформление телевизионных передач. Другой не менее популярный пакет программ это Auto-CAD. Он применяется в основном инженерами и проектировщиками для создания чертежей и пространственных моделей. Кроме этих существует множество других специализированных программных пакетов охватывающих практически все стороны человеческой жизни. Среди многообразия возможностей, предоставляемых современными вычислительными

средствами, те, что основаны на пространственно-образном мышлении человека,

занимают особое место. Современные программно-оперативные средства компьютерной графики представляют собой весьма эффективный инструмент поддержки такого мышления при выполнении работ самых разных видов. С другой стороны именно пространственно-образное мышление является неформальной творческой основой для расширения изобразительных возможностей компьютеров. Это важное обстоятельство предполагает взаимно обогащающее сотрудничество всё более совершенной техники и человека со всем богатством знания, накопленного предшествующими поколениями. Глаз и раньше был эффективным средством познания человеком мира и себя. Поэтому столь привлекательной оказывается компьютерная визуализация, особенно визуализация динамическая.

Алгоритмы растровой графики

В большинстве приложений используется одно из существенных достоинств растровых устройств - возможность заполнения областей экрана.

Существует две разновидности заполнения:

· первая, связанная как с интерактивной работой, так и с программным синтезом изображения, служит для заполнения внутренней части многоугольника, заданного координатами его вершин;

· вторая, связанная в первую очередь с интерактивной работой, служит для заливки области, которая либо очерчена границей с кодом пиксела, отличающимся от кодов любых пикселов внутри области;

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

Определить принадлежность пиксела многоугольнику можно, например, подсчетом суммарного угла с вершиной на пикселе при обходе контура многоугольника. Если пиксел внутри, то угол будет равен 360?, если вне - 0?

Рис. 1: Определение принадлежности пиксела многоугольнику

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

Построчное заполнение

Реально используются алгоритмы построчного заполнения, основанные на том, что соседние пикселы в строке скорее всего одинаковы и меняются только там где строка пересекается с ребром многоугольника. Это называется когерентностью растровых строк (строки сканирования Yi, Yi+1, Yi+2 на рис. ). При этом достаточно определить X-координаты пересечений строк сканирования с ребрами. Пары отсортированных точек пересечения задают интервалы заливки.

Рис. 2: Построчная закраска многоугольника

Кроме того, если какие-либо ребра пересекались i-й строкой, то они скорее всего будут пересекаться также и строкой i+1. (строки сканирования Yiи Yi+1 на рис. 2). Это называется когерентностью ребер. При переходе к новой строке легко вычислить новую X-координату точки пересечения ребра, используя X-координату старой точки пересечения и тангенс угла наклона ребра:

Xi+1 = Xi + 1/k

(тангенс угла наклона ребра - k = dy/dx, так как dy = 1, то 1/k = dx).

Смена же количества интервалов заливки происходит только тогда, когда в строке сканирования появляется вершина.

Учет когерентности строк и ребер позволяет построить для заполнения многоугольников различные высокоэффективные алгоритмы построчного сканирования. Для каждой строки сканирования рассматриваются только те ребра, которые пересекают строку. Они задаются списком активных ребер (САР). При переходе к следующей строке для пересекаемых ребер перевычисляются X-координаты пересечений. При появлении в строке сканирования вершин производится перестройка САР. Ребра, которые перестали пересекаться, удаляются из САР, а все новые ребра, пересекаемые строкой заносятся в него.

Общая схема алгоритма, динамически формирующего список активных ребер и заполняющего многоугольник снизу-вверх, следующая:

1. Подготовить служебные целочисленные массивы Y-координат вершин и номеров вершин.

2. Совместно отсортировать Y-координаты по возрастанию и массив номеров вершин для того, чтобы можно было определить исходный номер вершины.

3. Определить пределы заполнения по оси Y - Y_мin и Y_max. Стартуя с текущим значением Y_tek = Y_min, исполнять пункты 4-9 до завершения раскраски.

4. Определить число вершин, расположенных на строке Y_tek - текущей строке сканирования.

5. Если вершины есть, то для каждой из вершин дополнить список активных ребер, используя информацию о соседних вершинах. Для каждого ребра в список активных ребер заносятся:

· максимальное значение Y-координаты ребра,

· приращение X-координаты при увеличении Y на 1,

· начальное значение X-координаты.

Если обнаруживаются горизонтальные ребра, то они просто закрашиваются и информация о них в список активных ребер не заносится. Если после этого обнаруживается, что список активных ребер пуст, то заполнение закончено.

6. По списку активных ребер определяется Y_след - Y-координата ближайшей вершины. (Вплоть до Y_след можно не заботиться о модификации САР а только менять X-координаты пересечений строки сканирования с активными ребрами).

7. В цикле от Y_tek до Y_след:

o выбрать из списка активных ребер и отсортировать X-координаты пересечений активных ребер со строкой сканирования;

o определить интервалы и выполнить закраску;

o перевычислить координаты пересечений для следующей строки сканирования.

8. Проверить не достигли ли максимальной Y-координаты. Если достигли, то заливка закончена, иначе выполнить пункт .

9. Очистить список активных ребер от ребер, закончившихся на строке Y_след и перейти к пункту 4.

В Приложении 5 приведены две подпрограммы заполнения многоугольника - V_FP0 и V_FP1. Первая реализует данный (простейший) алгоритм. Эта программа вполне работоспособна, но генерирует двух и трехкратное занесение части пикселов. Это мало приемлемо для устройств вывода типа матричных или струйных принтеров.

В отличие от V_FP0, в программе V_FP1 используется более сложный алгоритм формирования списка активных ребер, обеспечивающий практически полное отсутствие дублирований (рис.).

Рис. 3: Сравнение алгоритмов заполнения многоугольника

Сортировка методом распределяющего подсчета

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

Для рассмотрения алгоритма предположим, что надо отсортировать числа, заданные в массиве с именем «Исходный_массив»; количество сортируемых чисел задается скаляром «Кол-во_чисел»; сортируемые числа J удовлетворяют условию:

0 ? J < Max_число.

Для сортировки потребуются описания:

int Max_число; /* Верхняя граница значений */

int *Повтор; /* Длина этого массива = Max_число */

int Кол_чисел; /* Кол-во сортируемых чисел */

int *Исходный_массив; /* Длина этого массива >= Кол_чисел */

int *Результат; /* Длина этого массива >= Кол_чисел */

int ii,jj, kk; /* Рабочие переменные */

1. Обнуляется служебный массив для подсчета числа повторений исходных кодов.

2. for (ii=0; ii<Max_число; ++ii) Повтор[ii]= 0;

3. Сортируемый массив просматривается и вычисляется количество раз повторений каждого числа:

4. for (ii= 0; ii < Кол_чисел; ++ii) {

5. jj= Исходный_массив[ii];

6. Повтор[jj]= Повтор[jj] + 1;

7. }

8. Суммируется количество повторений каждого числа, так что значение Повтор[J] даст начальное расположение группы чисел, равных J, в отсортированном массиве:

9.

10. jj= 0;

11. for (ii=0; ii<Max_число; ++ii) {

12. jj= jj + Повтор[ii];

13. Повтор[ii]= jj;

14. }

15. Просматривается исходный массив и числа из него заносятся в массив результатов той же длины. Индекс занесения числа J в массив результатов равен значению J-го элемента массива Повтор. После занесения числа J значение Повтор[J] уменьшается на 1:

16. for (ii= 0; ii < Кол_чисел; ++ii) {

17. jj= Исходный_массив[ii];

18. kk= Повтор[jj];

19. Результат[kk]= jj;

20. Повтор[jj]= Повтор[jj] - 1;

21. }

растровая векторная графика заполнение экран

Заливка области с затравкой

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

При этом тем или иным образом задается заливаемая (перекрашиваемая) область, код пиксела, которым будет выполняться заливка и начальная точка в области, начиная с которой начнется заливка.

По способу задания области делятся на два типа:

? гранично-определенные, задаваемые своей (замкнутой) границей такой, что коды пикселов границы отличны от кодов внутренней, перекрашиваемой части области. На коды пикселы внутренней части области налагаются два условия - они должны быть отличны от кода пикселов границы и кода пиксела перекраски. Если внутри гранично-определенной области имеется еще одна граница, нарисованная пикселами с тем же кодом, что и внешняя граница, то соответствующая часть области не должна перекрашиваться;

? внутренне-определенные, нарисованные одним определенным кодом пиксела. При заливке этот код заменяется на новый код закраски.

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

Заливаемая область или ее граница - некоторое связное множество пикселов. По способам доступа к соседним пикселам области делятся на 4-х и 8-ми связные. В 4-х связных областях доступ к соседним пикселам осуществляется по четырем направлениям - горизонтально влево и вправо и в вертикально вверх и вниз. В 8-ми связных областях к этим направлениям добавляются еще 4 диагональных. Используя связность мы может, двигаясь от точки затравки, достичь и закрасить все пикселы области.

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

В общем, 4-х связную область мы можем заполнить как 4-х, так и 8-ми связным алгоритмом. Обратное же неверно. Так область на рис. а мы можем заполнить любым алгоритмом, а область на рис. б, состоящую из двух примыкающих 4-х связных областей можно заполнить только 8-ми связным алгоритмом.

Рис. 5: Связность областей и их границ

С использованием связности областей и стека можно построить простые алгоритмы закраски как внутренне, так и гранично-определенной области. В [] рассматриваются совсем короткие рекурсивные подпрограммы заливки. В [] - несколько более длинные итеративные подпрограммы.

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

Рассмотрим простой алгоритм заливки гранично-определенной 4-х связной области. В [] приведена рекурсивная реализация подпрограммы заливки 4-х связной гранично-определенной области:

void V_FAB4R (grn_pix, new_pix, x_isx, y_isx)

int grn_pix, new_pix, x_isx, y_isx;

{

if (getpixel (x_isx, y_isx) ? grn_pix &&

getpixel (x_isx, y_isx) ? new_pix)

{

putpixel (x_isx, y_isx, new_pix);

V_FAB4R (grn_pix, new_pix, x_isx+1, y_isx);

V_FAB4R (grn_pix, new_pix, x_isx, y_isx+1);

V_FAB4R (grn_pix, new_pix, x_isx-1, y_isx);

V_FAB4R (grn_pix, new_pix, x_isx, y_isx-1);

}

} /* V_FAB4R */

Заливка выполняется следующим образом:

? определяется является ли пиксел граничным или уже закрашенным,

? если нет, то пиксел перекрашивается, затем проверяются и если надо перекрашиваются 4 соседних пиксела.

Полный текст тестовой программы V_FAB4R с использованием этой подпрограммы приведен в Приложении 6.

Понятно, что несмотря на простоту и изящество программы, рекурсивная реализация проигрывает итеративной в том, что требуется много памяти для упрятывания вложенных вызовов.

В [] приведен итеративный алгоритм закраски 4-х связной гранично-определенной области. Логика работы алгоритма следующая:

Поместить координаты затравки в стек

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

Извлечь координаты пиксела из стека.

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

Для всех четырех соседних пикселов проверить

является ли он граничным или уже перекрашен.

Если нет, то занести его координаты в стек.

На рис. а) показан выбранный порядок перебора соседних пикселов, а на рис. б) соответствующий ему порядок закраски простой гранично-определенной области.

a) Порядок перебора соседних пикселов

б) Порядок заливки области

Рис. 6: Заливка 4-х связной области итеративным алгоритмом

Ясно, что такой алгоритм экономнее, так как в стек надо упрятывать только координаты.

Рассмотренный алгоритм легко модифицировать для работы с 8-ми связными гранично-определенными областями или же для работы с внутренне-определенными.

Сравнительные прогоны тестовых программ V_FAB4R и V_FAB4 подтвердили соображения о неэкономности рекурсивного алгоритма: при стандартном окне стека в 64 K с помощью рекурсивной программы можно закрасить квадратик не более чем 57Ч57 пикселов. Итеративная же программа V_FAB4 при тех же условиях позволяет закрасить прямоугольник размером 110Ч110 истратив на массив координат 16382 байта.

Как уже отмечалось, очевидный недостаток алгоритмов непосредственно использующих связность закрашиваемой области - большие затраты памяти на стек, так как на каждый закрашенный пиксел в стеке по максимуму будет занесена информация о еще трех соседних. Кроме того, информация о некоторых пикселах может записываться в стек многократно. Это приведет не только к перерасходу памяти, но и потере быстродействия за счет многократной раскраски одного и того же пиксела. Значительно более экономен далее рассмотренный построчный алгоритм заливки.

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

Использует пространственную когерентность:

· пикселы в строке меняются только на границах;

· при перемещении к следующей строке размер заливаемой строки скорее всего или неизменен или меняется на 1 пиксел.

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

Последовательность работы алгоритма для гранично определенной области следующая:

1. Координата затравки помещается в стек, затем до исчерпания стека выполняются пункты 2-4.

2. Координата очередной затравки извлекается из стека и выполняется максимально возможное закрашивание вправо и влево по строке с затравкой, т.е. пока не попадется граничный пиксел. Пусть это Хлев и Хправ, соответственно.

3. Анализируется строка ниже закрашиваемой в пределах от Хлев до Хправ и в ней находятся крайние правые пикселы всех незакрашенных фрагментов. Их координаты заносятся в стек.

4. То же самое проделывается для строки выше закрашиваемой.

Алгоритмы векторной графики

Основными примитивами векторной графики являются линия и образованный с ее помощью контур (открытый или замкнутый). Параметры обводки контура определяют его вид при отображении. К ним относятся:

* толщина линии обводки;

* цвет линии;

* тип линии (сплошная, пунктирная и пр.);

* форма концов (со стрелкой, закругленные и пр.).

Замкнутые контуры обладают особым свойством - заливкой, т.е. параметрами заполнения охватываемой контуром области.

Существует несколько типов заливок:

* заливка основным цветом, т.е. заполнение внутренней области выбранным цветом;

* текстурная заливка - заполнение узором с регулярной структурой;

* заливка изображением-картой (узором) - заполнение готовым растровым изображением, называемым картой;

* градиентная заливка - заполнение двумя цветами с плавным переходом между ними.

Для каждого вида заливок существуют свои алгоритмы.

Рекурсивный алгоритм заливки

Первоначально необходимо определить область заливки. Существует несколько способов задания

областей, ограниченных контурами:

1. Внутренне-определенные области: существуют группы точек находящиеся снаружи и внутри контура, имеющих различные значения кода цвета или яркости внутри и вне данного контура.

2. Гранично-определенные области: существуют некоторые "затравочные" точки, в соответствии со свойствами которых производится закраска всей области.

3. Области, заданные списком вершин, например для закраски гранично-определенных областей существует несколько алгоритмов, к примеру рекурсивный метод.

Рекурсивный метод прост для программирования, однако считается низкоэффективным. От затравочной точки просматривают все точки. Если они не граничные, их закрашивают и код соответствующего цвета записывают в стековую память. Далее производится считывание данных из стека, и если очередная точка не является граничной и закрашенной, ей присваивают тот же код.

Текстурная заливка

Текстурные заливки - это такие заливки, в которых все внутреннее пространство объекта заполняется единым рисунком, отображающим текстуру таких поверхностей, как металл, облака, дерево, цемент и т.д., с помощью специально созданных цветных растровых изображений. Арсенал текстурных заливок представляет собой обширный набор таких математических моделей, у каждой из которых имеется уникальный набор управляющих параметров. Эти модели распределены по нескольким библиотекам, в которых хранятся несколько десятков описаний текстур и у каждой есть имя, описывающее ее внешний вид. Основным параметром каждой из моделей, по которым строится изображение, является номер текстуры.

Заливка изображением-узором (картой)

Узоры представляют собой заливки в виде набора заранее подготовленных однотипных прямоугольных ячеек заполненных оригинальным рисунком. В результате использования такой заливки внутреннее пространство объекта заполняется совокупностью этих ячеек, что образует непрерывный рисунок. Простейший вариант заливки узором -- это двухцветный узор, например черно-белый. Полноцветный узор (векторная заливка) - это полноцветный узор с использованием и линий, и заливок. С помощью узорных заливок можно создавать мозаичные фоны или повышать реалистичность создаваемых изображений (при использовании растровых заливок). Все заливки состоят из небольших квадратных плиток, которые складываются в правильную мозаику без искажений. Очень важно, что данный тип заливки позволяет в интерактивном режиме изменять элементарные части, что позволяет создавать новый, совершенно не похожий на исходный, узор.

Градиентная заливка

Градиентом называется постепенный переход от одного оттенка или цвета к другому оттенку или цвету. Градиентные заливки в отличие от однородных отображают сложные цветовые переходы между различными цветами. Добавляя в градиент необходимое число промежуточных цветов, можно формировать многоцветные градиентные заливки. В этом случае градиентную заливку можно трактовать как своеобразный узор, образуемый постепенным переходом между двумя или несколькими цветами или оттенками одного итого же цвета. В зависимости от направления перехода цветов существует четыре типа градиентных заливок: линейная, радиальная, коническая и квадратная. Цветовая гамма градиента определяется серией опорных точек, которые обозначаются на шкале цветового перехода специальными маркерами: начальный маркер, конечный маркер цвета и промежуточные маркеры. Опорными точками применительно к градиенту называют точки, в которых тот или иной цвет присутствует в количестве 100% и не смешивается с другими цветами. Маркеры опорных точек можно сдвигать относительно друг друга, настраивая тем самым цветовой рисунок градиента.

Процедура заполнения

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

При этом тем или иным образом задается заливаемая (перекрашиваемая) область, код пиксела, которым будет выполняться заливка и начальная точка в области, начиная с которой начнется заливка.

По способу задания области делятся на два типа:

· гранично-определенные, задаваемые своей (замкнутой) границей такой, что коды пикселов границы отличны от кодов внутренней, перекрашиваемой части области. На коды пикселы внутренней части области налагаются два условия - они должны быть отличны от кода пикселов границы и кода пиксела перекраски. Если внутри гранично-определенной области имеется еще одна граница, нарисованная пикселами с тем же кодом, что и внешняя граница, то соответствующая часть области не должна перекрашиваться;

· внутренне-определенные, нарисованные одним определенным кодом пиксела. При заливке этот код заменяется на новый код закраски.

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

Заливаемая область или ее граница - некоторое связное множество пикселов. По способам доступа к соседним пикселам области делятся на 4-х и 8-ми связные. В 4-х связных областях доступ к соседним пикселам осуществляется по четырем направлениям - горизонтально влево и вправо и в вертикально вверх и вниз. В 8-ми связных областях к этим направлениям добавляются еще 4 диагональных. Используя связность мы может, двигаясь от точки затравки, достичь и закрасить все пикселы области.

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

В общем, 4-х связную область мы можем заполнить как 4-х, так и 8-ми связным алгоритмом. Обратное же неверно. Так область на рис. а мы можем заполнить любым алгоритмом, а область на рис. б, состоящую из двух примыкающих 4-х связных областей можно заполнить только 8-ми связным алгоритмом.

С использованием связности областей и стека можно построить простые алгоритмы закраски как внутренне, так и гранично-определенной области. В [] рассматриваются совсем короткие рекурсивные подпрограммы заливки. В [] - несколько более длинные итеративные подпрограммы

Заключение

Несмотря на то, что векторная графика не является реалистичной, она востребована сегодня. Ее можно встретить в полиграфии, интернете, диаграмах, графиках и не только, некоторые любят ее как раз за нереалистичность. Даже история создания одного из основных элементов векторной графики говорит сама за себя - на первых же парах она стала использоваться в инженерных целях и значительно позже добралась до компьютерной графики.

Говоря о представлении векторной графики на экране, необходимо упомянуть о форматах векторных графических файлов и векторных редакторах. Закрытость наиболее популярных, развитых и функциональных программ и форматов; большое количество различных векторных форматов; с каждой новой версией редактора выходит новая версия формата; слабая поддержка профессиональными редакторами форматов сторонних разработчиков - все это является негативными особенностями векторной графики. Эти моменты усложняют работу с векторной графикой, например необходимости предачи информации между различными редакторами. Однако, не все так печально. Каждый новый релиз программы в большинстве случаев ведет за собой увеличение количества поддерживаемых форматов. К тому же, существуют и разрабатываются форматы, способные помочь исправить это положение. Так можно назвать формат PDF, который используется как универсальный формат для передачи готового документа, или формат SVG, которому прочат лидирующие позиции среди своих конкурентов. Говоря о векторной графике, нельзя забывать еще одно ее проявление - это Flash. Flash -- это технология, сумевшая доказать свою востребованность сразу же после своего создания и до сих пор не реализовавшая полностью свой потенциал.

С каждым годом потребность не только во Flash'е , но и в целом в векторной графике, растет, а вместе с этим растут требования и к векторным форматам, поэтому можно ожидать новых решений, связанных как с универсальностью, так и с новыми возможностями.

Библиографический список

1. Роджерс Д. Алгоритмические основы машинной графики. Пер. с англ. М.: Мир, 1989. 512 c.

2. Павлидис Т. Алгоритмы машинной графики и обработки изображений. Пер. с англ. М.: Радио и связь, 1986.

3. Прэтт У. Цифровая обработка изображений: Пер. с англ. в 2-х книгах. М.: Мир, 1982.

4. Роджерс Д., Адамс Дж. Математические основы машинной графики. Пер. с англ. М.: Машиностроение, 1980.

5. Антонофф М., Линдерхолм О. Лазерные принтеры// Компьютер Пресс, сборник N 1, 1989, с. 3-8.

6. Гилой В. Интерактивная машинная графика. Пер. с англ. М.: Мир, 1981.

7. Мячев А.А., Степанов В.Н. Персональные ЭВМ и микроЭВМ. Основы организации: Справочник/ Под ред. А.А.Мячева. М.: Радио и связь, 1991.

8. Сизых В.Г. Растровые дисплеи ряда Гамма. Новосибирск, 1985. 26 с. (Препринт ВЦ СО АН СССР; N 607).

Приложение 1.

В данном приложении приведена процедура заливки гранично-определенной области с затравкой.

Процедура - V_FAB4R реализует рекурсивный алгоритм заполнения для 4-х связной области.

Характерная особенность таких алгоритмов - очень большие затраты памяти под рабочий стек и многократное дублирование занесения пикселов. Характерные значения для размера стека (см. ниже определение константы MAX_STK) около десяти тысяч байт при размере порядка 70Ч70 пикселов и очень сильно зависят от размеров заливаемой области, ее конфигурации и выбора начальной точки. Так, например, для заливки квадрата со стороной, равной 65 дискретам, и старте заливки из точки (20,20) относительно угла квадрата требуется 7938 байт для стека.

/*---------------------------------------------------- V_FAB4R

* Подпрограммы для заливки с затравкой гранично-определенной

* области 4-х связным алгоритмом:

*

* V_FAB4R - заливка гранично-определенной

* области 4-х связным алгоритмом

*/

#include <graphics.h>

#include <stdio.h>

#define MAX_GOR 2048 /* Разрешение дисплея по X */

#define MAX_VER 2048 /* Разрешение дисплея по Y */

static int gor_max= MAX_GOR;

static int ver_max= MAX_VER;

/*---------------------------------------------------- V_FAB4R

* Заливка гранично-определенной области

* 4-х связным алгоритмом

*/

void V_FAB4R (grn_pix, new_pix, x_isx, y_isx)

int grn_pix, new_pix, x_isx, y_isx;

{

if (getpixel (x_isx, y_isx) != grn_pix &&

getpixel (x_isx, y_isx) != new_pix)

{

putpixel (x_isx, y_isx, new_pix);

V_FAB4R (grn_pix, new_pix, x_isx+1, y_isx);

V_FAB4R (grn_pix, new_pix, x_isx, y_isx+1);

V_FAB4R (grn_pix, new_pix, x_isx-1, y_isx);

V_FAB4R (grn_pix, new_pix, x_isx, y_isx-1);

}

} /* V_FAB4 */

Тест процедуры V_FAB4R

/*-------------------------------------------------- FAB4_MAIN

*/

void main (void)

{

int ii, kol, grn, new, entry;

int x_isx, y_isx;

int gdriver = DETECT, gmode;

int Px[256] = {200,200,250,270,270,210,210,230,230};

int Py[256] = {200,250,250,230,200,210,230,230,210};

kol= 5; /* Кол-во вершин */

grn= 11; /* Код пикселов границы */

new= 14; /* Код заливки */

x_isx= 240; /* Координаты затравки */

y_isx= 240;

entry= 0;

initgraph(&gdriver, &gmode, "c:\tc\bgi");

if ((ii= graphresult()) != grOk) {

printf ("Err=%d\n", ii); goto all;

}

m0:goto m2;

m1:++entry;

printf("Vertexs, boundary_pixel, new_pixel= (%d %d %d) ? ",

kol, grn, new);

scanf ("%d%d%d", &kol, &grn, &new);

if (kol < 0) goto all;

for (ii=0; ii<kol; ++ii) {

printf ("Px[%d], Py[%d] = ? ", ii, ii);

scanf ("%d%d", &Px[ii], &Py[ii]);

}

printf ("X,Y isx= (%d %d) ? ", x_isx, y_isx);

scanf ("%d%d", &x_isx, &y_isx);

m2:

setbkcolor(0);

cleardevice();

/* Построение границы */

setcolor (grn);

for (ii= 0; ii<kol-1; ++ii)

line (Px[ii], Py[ii], Px[ii+1], Py[ii+1]);

line (Px[kol-1], Py[kol-1], Px[0], Py[0]);

/* При первом входе строится квадратик дырки */

if (!entry) {

for (ii= kol; ii<kol+3; ++ii)

line (Px[ii], Py[ii], Px[ii+1], Py[ii+1]);

line (Px[kol+3], Py[kol+3], Px[kol], Py[kol]);

}

/* Заливка */

V_FAB4R (grn, new, x_isx, y_isx);

goto m1;

all:

closegraph();

}

Размещено на Allbest.ru


Подобные документы

  • Рассмотрение областей применения компьютерной графики. Изучение основ получения различных изображений (рисунков, чертежей, мультипликации) на компьютере. Ознакомление с особенностями растровой и векторной графики. Обзор программ фрактальной графики.

    реферат [192,9 K], добавлен 15.04.2015

  • Методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов. Основные понятия компьютерной графики. Особенности применения растровой, векторной и фрактальной графики. Обзор форматов графических данных.

    реферат [49,1 K], добавлен 24.01.2017

  • Недостатки и преимущества векторной графики - программы для построения геометрических объектов - линий, эллипсов, прямоугольников, многоугольников и дуг. Математические основы и средства создания изображений. Структура иллюстрации (контур, заливка).

    презентация [130,9 K], добавлен 12.02.2014

  • Понятие векторной и растровой графики, форматы растровых изображений TIF, JPG, GIF. Характеристика программ графики Adobe PhotoDeluxe, Paint Shop Pro, Adobe Photoshop, CorelDraw, AutoCAD. Создание приложений по расчету стоимости продукции с учетом скидки.

    курсовая работа [34,8 K], добавлен 08.12.2010

  • Исследование видов программного обеспечения для мультимедиа и средств редактирования. Описания редакторов векторной и растровой графики. Анализ методов преобразования изображений. Технологии баз данных, требуемые для графики. Преобразование текста в речь.

    презентация [154,7 K], добавлен 11.10.2013

  • Представление графической информации в компьютере. Понятие пикселя и растрового изображения. Редактор растровой графики Photoshop. Инструменты выделения. Механизм выделения областей. Геометрические контуры выделения. Эффект растровой графики шум.

    контрольная работа [1,4 M], добавлен 01.02.2009

  • Суть принципа точечной графики. Изображения в растровой графике, ее достоинства. Обзор наиболее известных редакторов векторной графики. Средства для работы с текстом. Программы фрактальной графики. Форматы графических файлов. Трехмерная графика (3D).

    дипломная работа [764,7 K], добавлен 16.07.2011

  • Сущность и основные принципы реализации компьютерной графики, разновидности компьютерных изображений и их отличительные признаки. Оценка достоинств и недостатков векторной и растровой графики, особенности и закономерности их применения в Интернете.

    контрольная работа [20,8 K], добавлен 05.02.2010

  • Виды и способы представления компьютерной информации в графическом виде. Отличительные особенности растровой и векторной графики. Масштабирование и сжатие изображений. Форматы графических файлов. Основные понятия трехмерной графики. Цветовые модели.

    контрольная работа [343,5 K], добавлен 11.11.2010

  • Компьютерная графика как разные виды графических изображений, создаваемых или обрабатываемых с помощью компьютера. Оборудование, используемое для ввода графической информации. Программа растровой графики Adobe Photoshop, векторной графики CorelDraw.

    презентация [549,3 K], добавлен 14.05.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.