Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек
КОМПЛЕКС ЛАБОРАТОРНЫХ РАБОТ 1-8
Методические указания
по выполнению лабораторных работ
Дисциплина
«Компьютерная графика»
Специальность 230100.62
«Информатика и вычислительная техника»
Киров,2012
Содержание
Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек. 4
Лабораторные работы №2,3. Реализация алгоритмов растровой развертки отрезков 11
Лабораторные работы № 4,5 Реализация алгоритмов растровой графики для заполнения сплошных областей. 20
Лабораторная работа № 6 Реализация двумерного алгоритма отсечения отрезков Сазерленда-Коэна. 25
Лабораторная работа № 7 Аффинные преобразования на плоскости. 28
Лабораторная работа № 8. Представление и проецирование трехмерных объектов 33
Лабораторная работа №9. Аффинные преобразования в пространстве. 37
Лабораторная работа №1. Приёмы работы в графическом редакторе и использование графических библиотек
Цель работы:
− научиться работать в графическом редакторе Paint;
− научиться применять в программах на языке Pascal основные графические примитивы двумерной компьютерной графики - функции универсальной графической библиотеки BGI.
Краткие теоретические сведения
Графические редакторы - основная составная часть пакетов иллюстративной графики, а также приложения многих других графических пакетов и системных оболочек. Подразделяются графические редакторы на растровые и векторные, служат для создания и модификации иллюстраций, а также для их сохранения с целью дальнейшего использования. Они содержат:
- строку меню;
- набор графических операций (2D- или 3D -примитивов) и инструментов (кисть, перо, резиновая нить, ластик, полигон и т.д.);
- поле образцов толщины линий;
- палитру доступных цветов для рисования контура и закраски сплошных областей;
- строку заголовка, линейки прокрутки.
Графические редакторы позволяют:
− "резать", "склеивать", "стирать", "зеркально отображать", масштабировать, инвертировать, копировать, поворачивать произвольные части изображения;
− обращаться через строку меню к библиотеке готовых объектов и вставлять их в создаваемые рисунки;
− применять для рисования разнообразные инструменты ("кисти", "краски", трафареты, "пульверизаторы" и т.д.);
− пользоваться разными (в том числе масштабируемыми) шрифтами для создания рекламы, заставок, объявлений.
Paint - простой графический растровый редактор для создания иллюстраций. Запускается щелчком мыши по соответствующей пиктограмме на рабочем столе Windows. Предоставляет стандартный пользовательский набор инструментов для рисования мышью и некоторые сервисные возможности работы с объектами в главном меню простого и интуитивно понятного интерфейса. Можно пользоваться готовыми рисунками и сохранять свои нарисованные (в формате .bmp).
В процессе практической работы приобретаются навыки рисования и создается иллюстрация. Например, научиться создавать простейший рисунок можно, выполнив следующее задание: создать условное изображение вольтметра на электрических схемах. Порядок работы:
1. Запустите программу Paint. Убедитесь, что на палитре цветов заданы: основной цвет (выбор левой клавишей мыши) - черный, фон (выбор правой клавишей мыши)- белый.
2. В меню Рисунок выберите команду Атрибуты. В диалоговом окне Атрибуты задайте ширину рисунка 300 точек и высоту - 200 точек. Закройте окно Атрибуты.
3. Выберите инструмент Эллипс, в палитре настройки инструмента - без заполнения.
4. С помощью клавиши Shift методом протягивания нарисуйте окружность в центре поля диаметром примерно в половину высоты рисунка. Отпустите клавишу Shift.
5. Выберите инструмент Линия. Вариант толщины - второй сверху.
6. С помощью клавиши Shift нарисуйте небольшой горизонтальный отрезок в стороне от окружности.
7. Выберите инструмент Выделение, прозрачный фон.
8. Методом протягивания выделите прямоугольный фрагмент, включающий отрезок прямой, но не затрагивающий окружность. Клавишами Ctrl+X поместите его в буфер обмена.
9. С помощью Ctrl+V вставьте отрезок на рисунок (выделение сохранится).
10. Переместите выделенный фрагмент впритык к окружности слева по центру. Обратите внимание, что фон фрагмента не перекрывает окружность.
11. Повторите пункты 10-11, но отрезок присоедините справа от окружности.
12. Выделите инструмент Текст.
13. Методом протягивания создайте область ввода текста внутри окружности. Введите символ “V”. С помощью панели Шрифты задайте подходящий размер и начертание буквы.
14. Методом перетаскивания за границу области ввода текста поместите букву “V“ в центр окружности.
15. Щелкните вне области ввода текста, чтобы превратить текст в часть рисунка.
16. Сохраните рисунок в файле Scheme.bmp.
Такую же иллюстрацию можно получить и другим путем, написав программу вывода ее элементов на языке программирования.
На растровых графических дисплеях изображение представляется прямоугольной матрицей точек (пикселов) определенного цвета. Для этого компьютер имеет видеоадаптер – устройство, которое хранит в своей памяти, называемой видеопамятью, изображение и обеспечивает регулярное (не менее 75 раз в секунду) отображение этой памяти на экран дисплея. На каждый пиксел изображения отводится фиксированное количество битов видеопамяти, зависящее от ее объема, типа и режима видеоадаптера. Практически каждый видеоадаптер поддерживает несколько режимов работы, различающихся размерами матрицы пикселов (разрешением экрана), количеством одновременно отображаемых на экране цветов, количеством видеостраниц.
Фактически любая графическая операция сводится к работе с отдельными пикселами - нарисовать точку заданного цвета в определенном месте экрана или узнать цвет заданной точки. Точка - простейший примитив 2D-графики. Однако, практически все графические библиотеки предоставляют пользователю и более сложные примитивы - объекты, необходимыми для эффективной работы. Среди объектов можно выделить следующие основные группы:
- линейные изображения(растровые образы линий)
- сплошные объекты (растровые образы закрашенных областей)
- шрифты (текстовые символы)
- изображения (прямоугольные матрицы пикселов).
Как правило, каждый универсальный язык программирования содержит возможность работы с основными группами графических объектов. В среде Turbo Pascal такая возможность обеспечивается библиотекой BGI - Borland's Graphics Interface с набором драйверов (небольших программ сопряжения с видеоадаптерами) для основных типов адаптеров. В начале работы с библиотекой определяется тип имеющегося адаптера и соответствующий драйвер загружается в память, чем достигается почти полная машинная независимость программ. Библиотека находится в модуле Graph, поэтому для работы с ней необходимо использовать оператор uses Graph;
Основные процедуры BGI:
1. Инициализация и завершение работы с библиотекой
procedure InitGraph(var Dr, Mode:integer; DrPath:string) - инициализацирует библиотеку; обязательна и первая из используемых процедур при работе в графическом режиме.
Ее паpаметpы: Dr - тип драйвера, нужно указать соответствующую константу (VGA, например) или значение Detect, тогда библиотека сама определит тип имеющегося адаптера и выберет для него режим наибольшего разрешения.
Mode - режим работы видеодаптера, нужно указать соответствующую константу (например, VGAHi) или просто переменную. Если Dr=Detect, то параметр Mode не используется.
DrPatch -путь к файлу с драйверами (например,"d:\tp7\bgi")
function GraphResult: integer - возвращает код завершения предыдущей графической операции (значение grOk соответствует успешному завершению)
procedure CloseGraph - завершает работу с библиотекой, закрывает ее, отменяет графический режим работы.
function GetMaxX: integer; function GetMaxY: integer - возвращают максимальное значение соответственно X и Y- координаты пиксела.
Function GetGraphMode: integer - возвращает текущий графический режим
procedure ClearViewPort - очищает экран.
2. Работа с отдельными пикселами
Procedure PutPixel(x,y : integer; col : word) - рисует точку с координатами (x,y) цвета col
function GetPixel(x,y: integer) : word - возвращает цвет пиксела с координатами (x,y).
3. Рисование линейных объектов
procedure SetColor(col:word) - устанавливает цвет линии.
procedure SetLineStyle(style,pattern,width: word) - определяет тип (style) и толщину (width) линии.
По умолчанию линия сплошная (style=SolidLn) и ее толщина равна одному пикселу. Если стандартные параметры не устраивают, можно задать style=UserBitLn, тогда шаблон рисования линии определяется пользователем, задается вторым параметром (pattern= имя восьмибитовой переменной, в которой значение бита 1 означает, что точка ставится, 0 - нет).
procedure Line(x1,y1,x2,y2 : integer) - рисует линию от точки с координатами (x1,y1) до точки с (x2,y2).
procedure Circle(x,y,r : integer) - рисует окружность радиуса r с центром в точке (x,y).
procedure Arc(x, y, StartAngle, EndAngle, r: integer) - рисует дугу окружности радиуса r с центром в точке (x,y), начиная с угла StatrAngle и заканчивая углом EndAngle.
procedure Ellipse(x, y, StartAngle, EndAngle, rx, ry: integer) -рисует эллипс с центром в точке (x,y) и полуосями rx, ry, начиная с угла StatrAngle и заканчивая угломEndAngle.
4. Рисование сплошных объектов
procedure SetFillStyle(pattern, col: word) - задает шаблон и цвет закраски (по умолчанию белый).
procedure SetFillPattern (pattern: FillPatternType, col: word) -задает пользовательский шаблон и цвет закраски (по умолчанию белый). Тип FillPatternType: typeFillPatternType = array [1..8] of byte; Стандартные шаблоны для закраски: SolidFill (по умолчанию), LineFill, SlashFill и т.д. Если pattern=UserFill - шаблон задает пользователь с помощью процедуры SetFillPattern.
procedure Bar(x1,y1,x2,y2 : integer) - закрашивает прямоугольник с левым верхним (x1,y1) и правым нижним (x2,y2) углами.
procedure FloodFill(x,y: integer, BordCol: word) - закрашивает связную область, ограниченную цветом BordCol и содержащую внутри себя точку с координатами (x,y).
5. Вывод текста
procedure SetTextStyle (font, direction, size: word) – выбирает шрифт и его параметры. font - задает идентификатор одного из стандартных шрифтов: DefaultFont - растровый шрифт 8*8 пикселов из ПЗУ видеоадаптера. TriplexFont, GothicFont, SansSerifFont, SmallFont - пропорциональные векторные шрифты, входящие в комплект Turbo Pascal (каждый шрифт хранится в файле типа CHR, подгружается в оперативную память по вызову данной процедуры с этим шрифтом). direction - может принимать значения:HorizDir - вывод по горизонтали и VertDir - по вертикали. size - масштабный множитель (1,2,...,10), задает во сколько раз нужно увеличить размер шрифта перед выводом на экран.
procedure OutTextXY(x,y: integer; text: string) - выводит строку текста (text) так, что точка (x,y) оказывается вершиной левого верхнего угла первого символа.
6. Изменение палитры
Палитра используется для отображения на экране большего количества цветов, чем имеется в видеопамяти у изображения.
procedure SetPalette (col: word; ColVal: ShortInt) - устанавливает для логического цвета col физический ColVal).
procedure SetRGBPalette (col, RedVal, GreenVal, BlueVal: integer) - устанавливает для логического цвета col значения его RGB-составляющих).
7. Работа с видеостраницами
procedure SetVisualPage (page: word) - устанавливает видимой (изображаемой на экране) страницу номер page (по умолчанию 0).
procedure SetActivePage (page: word) - устанавливает активной (с которой работает библиотека в данный момент и куда происходит весь вывод) страницу номер page (по умолчанию 0).
Пример программы с выводом изображения деревьев:
uses Graph,crt;
var
grDriver: Integer; grMode: Integer;
procedure derevo(x,y:integer);{Рисование дерева}
begin
setfillstyle(1,4); bar(x,y,x+10,y-100); { прямоугольник}
setcolor(green); ellipse(x+5,y-160,0,360,20,60); ellipse(x+5,y-160,0,360,19,59);
setfillstyle(1,10); floodfill(x+5,y-160,green);
end;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,'c:\kg\tp7\bgi');{ Инициализация графики }
setcolor(15); { цвет рисования контуров }
setlinestyle(0,0,1); { стиль линий}
line(0,300,640,300);{линия от (0,300) до (640,300)}
setfillstyle(9,10); floodfill(10,400,15); {закраска}
setfillstyle(1,1); floodfill(10,10,15); derevo(50,350); derevo(100,400); derevo(160,310); derevo(200,450); derevo(280,330);setcolor(yellow); circle(540,100,50); {окружность}
setfillstyle(1,yellow); floodfill(540,100,yellow); setfillstyle(1,15); setcolor(15); fillellipse(500,150,25,25);{ закрашенный эллипс}
fillellipse(530,130,30,30); fillellipse(550,150,20,20); fillellipse(530,160,50,20); settextstyle(0,0,2); { стиль текста}
outtextxy(500,450,'Park'); {текст} readkey; {ожидание нажатия клавиши}
end.
Задание на лабораторную работу:
1. Создать рисунок в графическом редакторе Paint с помощью набора инструментов, меню и готовых объектов - рисунков с расширением bmp.
2. Используя примеры из помощи по модулю GRAPH среды TURBO PASCAL написать и выполнить программу на языке PASCAL c основными процедурами библиотеки BGI (можно воспользоваться предложенным примером для вывода деревьев).
Требования к защите лабораторной работы
Защита лабораторной работы состоит из демонстрации преподавателю результатов выполнения заданий на лабораторную работу и ответов на задаваемые преподавателем вопросы по ходу демонстрации.
Требования к отчету
Отчет выполняется на отдельных листах формата А4. Содержит титульный лист, оформленный согласно требованиям кафедры и исходный текст программы - результат выполнения пункта 2 задания на лабораторную работу.
Вопросы для самоподготовки:
1. Что такое пиксел, растровое изображение, примитив, палитра, видеоадаптер видеостраница, режим работы адаптера?
2. Какие основные группы графических объектов предоставляет TurboPascal и в каком виде?
3. Каким образом обеспечивается машинная независимость программы, использующей функции библиотеки BGI?
4. Основное назначение графических редакторов?
5. Основные возможности, предоставляемые пользователям графических редакторов?
Литература
1. Шикин, Е. В. Компьютерная графика: Динамика, реалист. изображения [текст] / Е. В. Шикин, А. В. Боресков. - М.: ДИАЛОГ-МИФИ, 1996. - 287c.: ил.
2. Боресков, А. В. Компьютерная графика: первое знакомство [текст] / А. В. Боресков, Е. В. Шикин, Г. Е. Шикина; Под ред. Е. В. Шикина. - М.: Финансы и статистика, 1996. - 176c.: ил. - (Диалог с компьютером).