Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lrgraph

.pdf
Скачиваний:
12
Добавлен:
11.03.2016
Размер:
749.88 Кб
Скачать

21

Лабораторная работа №3

Синтез статического изображения в графическом режиме

Цель работы: исследование графического режима работы дисплея компьютера и алгоритмов формирования статического изображения его средствами.

Введение

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

разрешением (допустимым количеством точек) экрана;

размером видеопамяти;

установленным видеоадаптером (видеоконтроллером);

установленным графическим драйвером.

Внастоящее время дисплеи широкого применения допускают разрешение 320х200, 640х200, 640х400, 640х350, 720х348, 640х480, 720х350 или 1024х768. Более высокое разрешение обычно используется в дисплеях специального назначения.

Видеопамять (ВП) хранит код цвета каждого пикселя. При цветовой палитре в 4 цвета на каждую точку требуется 2 бита ВП, в 16 цветов - 4 бита (полбайта). Современные дисплеи допускают работу с палитрой в 224 цветов, т. е. на каждый пиксель используется 24 бита (3 байта) ВП. При ограниченном размере ВП увеличение цветности может привести к снижению разрешения дисплея и наоборот.

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

22

Графический режим работы дисплея требует также поддержки графического драйвера

- специальной программы c расширением .bgi.

Описание среды программирования

Как и в предыдущих лабораторных работах изучение графического режима предлага-

ется провести в среде языка программирования TurboPascal. При запуске Паскаль-программы по умолчанию дисплей находится в символьном режиме работы. Для перевода его в графиче-

ский режим используется специальная процедура языка

InitGraph(нк, нр, пд), где

нк - номер видеокарты. Существуют следующие номера для наиболее распространен-

ных видеокарт:

0 - автоматическое определение компьютером существующей видеокарты;

1 - CGA;

3 - EGA;

9 - VGA.

нр. - номер графического подрежима для данной видеокарты. Для EGA возможны подрежимы:

0 - 640х200, 16 цветов, 4 графические страницы;

1 - 640х350, 16 цветов, 2 страницы,

а для VGA:

0 - 640x200, 16 цветов, 4 страницы;

1 - 640х350, 16 цветов, 2 страницы;

2 - 640х480, 16 цветов, 1 страница.

пд. - путь к драйверу, т.е. строка, оформленная в соответствии с синтаксисом /1/, при-

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

Возврат из графического режима дисплея в символьный осуществляется процедурой

CloseGraph без параметров.

Все процедуры графического режима находятся в модуле Graph, который должен быть подключен к программе командой Uses.

23

Установка цветов фона и изображения производится соответственно процедурами

SetBkColor(цвет) и SetColor(цвет). Номера цветов соответствуют перечню, приведенному в лабораторной работе №1.

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

При работе в пределах меньшей чем экран области можно оформить ее в виде окна процедурой SetViewPort(x1, y1, x2, y2, Clip), где:

x1, y1 - координаты левого верхнего угла окна;

х2, y2 - координаты правого нижнего угла окна;

Clip - ограничитель фигур. Если Clip=True, то все построения проводятся только в пределах окна, в противном случае части фигур могут выходить за пределы окна.

Процедура ClearViewPort аналогична по свои действиям процедуре ClearDivice, но применительно к окну.

Графическое изображение может строиться поточечно с помощью процедуры

PutPixel(x, y, цвет), где x, y - координаты пикселя. Номера цветов соответствуют указанным ранее.

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

0 - сплошная линия;

1- пунктирная;

2- штрихпунктирная;

3- штриховая;

4- задается пользователем.

Параметр шаблон определяет вид линии, задаваемый пользователем. т.е. при стиле=4. В противном случае целесообразно задать шаблон=0.

Параметр толщина может принимать следующие значения:

1 - нормальная;

24

3 - толстая.

Спомощью линий можно строить следующие фигуры:

дугу на основе процедуры Arc(x, y, a1, a2, r), где:

x, y - координаты центра дуги;

a1 - угол до начальной точки дуги, отсчитываемый против часовой стрелки от горизон-

тальной оси, направленной слева направо;

a2 - угол до конечной точки дуги, отсчитываемый против часовой стрелки от горизон-

тальной оси, направленной слева направо; r - радиус дуги.

окружность на основе процедуры Circle(x, y, r), где: x, y - координаты центра окружности;

r - радиус окружности.

прямую линию на основе процедур:

Line(x1, y1, x2, y2), где x1, y1, x2, y2 - координаты точек, между которыми проводится

линия.

LineRel(Dx, Dy), где Dx, Dy - смещение координат точки конца линии по отношению к координатам исходной точки.

LineTo(x,y), где x, y - координаты точки, в которую проводится линия из текущей точ-

ки.

Две последние процедуры подразумевают, что указатель координат уже установлен в исход-

ную (начальную) точку линии. Данная операция может быть выполнена с помощью процедур

MoveTo(x, y) или MoveRel(Dx, Dy). Значения параметров x, y, Dx, Dy определены ранее.

прямоугольник с помощью процедуры Rectangle(x1, y1, x2, y2), где x1, y1 - координаты левого верхнего угла прямоугольника, а x2, y2 - правого нижнего.

TurboPascal содержит также процедуры построения закрашенных фигур:

закрашенного прямоугольника на основе процедуры Bar(x1, y1, x2, y2). Значение парамет-

ров объяснено выше.

сектора круга на основе процедуры PieSlice(x, y, a1, a2, r). Значения параметров аналогич-

ны процедуре Arc.

25

Закрашенные фигуры предполагают предварительную установку стиля заполнения с помощью процедуры SetFillStyle(шаблон, цвет), где шаблон допускает следующие значения:

0 - заполнение цветом фона;

1 - однородное заполнение указанным в данной процедуре цветом;

2 - заполнение ---;

3 - заполнение ///;

4- заполнение толстыми ///;

5- заполнение толстыми \\\;

6- заполнение \\\;

7- заполнение клеткой;

8- заполнение косой клеткой;

9- заполнение частой сеткой;

10- заполнение редкими точками;

11- заполнение частыми точками.

Пользователь может сам построить замкнутый контур и произвести его заполнение с помощью процедуры FloodFill(x, y, контур), где:

x, y - координаты любой точки внутри закрашиваемой области;

контур - цвет линии контура, внутри которого производится закрашивание.

Пример программы

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

Листинг программы

program figura; uses

Graph, Crt; {подключение требуемых модулей} var

Driver, Mode:integer;

26

begin

Driver:=0; {автоматическое обнаружение поддерживаемого графического режима}

Mode:=0; {установка подрежима}

InitGraph(Driver, Mode, ''); {установка графического режима}

SetBkColor(1); {установка синего цвета фона}

ClearDevice; {очистка экрана с окраской в цвет фона}

SetColor(4); {установка цвета для контура прямоугольника}

SetLineStyle(0, 0, 3);{установка типа линии: сплошная, толстая}

Rectangle(50, 50, 300, 300); {задание прямоугольника}

SetFillStyle(1, 14); {установка стиля заполнения}

FloodFill(100, 100, 4);{заполнение прямоугольника желтым цветом}

SetColor(2); {переход к зеленому цвету}

SetLineStyle(0, 0, 1); {переход к тонкой линии}

Circle(100, 100, 30); {вычерчивание четырех окружностей}

Circle(250, 100, 30);

Circle(100, 250, 30);

Circle(250, 250, 30);

SetFillStyle(1, 15);

FloodFill(100, 100, 2); {заполнение белым цветом четырех окружностей}

FloodFill(250, 100, 2);

FloodFill(100, 250, 2);

FloodFill(250, 250, 2);

Repeat {задержка до нажатия любой клавиши} until KeyPressed

Closegraph; {выход из графического режима} end.

Варианты задания

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

ния TurboPascal следующее статическое изображение:

27

1)голубое небо, красное солнце, синее море;

2)часы с часовой, минутной и секундной стрелками разного цвета;

3)стакан воды с тремя пузырьками воздуха;

4)красное солнце с десятью выходящими лучами;

5)связка из трех разноцветных шаров;

6)стилизованное изображение крана;

7)колесо с шестью спицами разного цвета;

8)дорожный знак "Кирпич";

9)светофор;

10) стол бильярда с тремя шарами;

11)правильная звезда на пол-экрана;

12)фасад дома с двумя окнами;

13)лестница в восемь перекладин;

14)стилизованное изображение парашюта;

15)диск телефона;

16)триумфальная арка;

17)анфас письменного стола с двумя тумбами по три ящика;

18)шахматная доска;

19)мяч, верхняя половина которого окрашена в желтый, нижняя - в зеленый цвет, а посредине красная полоса;

20)буква Н высотой в половину экрана. Все элементы буквы разного цвета;

21)на экране отображается понедельный по горизонтали календарь текущего месяца;

22)на экране отображается понедельный по вертикали календарь текущего месяца;

23)на экране по горизонтали нарисован спидометр до 200 км/час;

24)на экране вертикально нарисован градусник со шкалой от -20о до 60о;

25)фигура , где каждый сегмент разного цвета;

26)фигура высотой 200 и длиной 300 пикселей.

Выполнение лабораторной работы

28

1.Получить задание у преподавателя.

2.Написать и отладить на компьютере программу, реализующую требуемое изображе-

ние.

3.Результат работы программы продемонстрировать преподавателю.

4.Напечатать листинг программы.

Содержание отчета

Отчет включает:

1)содержание задания;

2)блок-схему программы;

3)листинг программы;

Контрольные вопросы

1. Какие параметры линии требуется указать при использованием данного графическо-

го примитива?

2.Какие параметры требуется задать при переходе к графическому режиму?

3.Какие процедуры перемещают указатель по экрану в графическом режиме?

4.Что такое пиксель?

5.Можно ли средствами графики нарисовать на экране компьютера закрашенный тре-

угольник?

Рекомендуемая литература

1. Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров. - М.: Машино-

строение, 1991. - 320 с.

2.Епанешников А.М., Епанешников В.А. Программирование в среде TurboPascal 7.0. - М.: "ДИАЛОГ_МИФИ", 1993. - 288 с.

3.Мизурохи С.В. TURBOPASCAL и объектно-ориентированное программирование. - М.: Фи-

нансы и статистика, 1992. - 192 с.

29

Лабораторная работа №4

Синтез динамического изображения в графическом режиме

Цель работы: исследование алгоритмов формирования динамического изображения графическими средствами .

Введение

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

-наличие двух или более графических страниц (смотри описание видеокарт EGA, VGA в лабораторной работе №3), каждая из которых может быть видимой (т.е. отображаться на экране дисплея) и/или активной (именно на ней модифицируется изображение средствами алгоритмического языка). По умолчанию при переходе в графический режим одно и та же страница является и видимой и активной, что удобно при синтезе статического изображения. Формирование динамического изображения с помощью двух страниц может быть проведено на основе следующего алгоритма (рис. 4.1).

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

1.очистки на экране части или всего изображения путем выборки фрагмента из ОЗУ и наложения на стираемый участок;

2.перемещения части или всего изображения путем выборки фрагмента из памяти и размещения на новом месте экрана.

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

Описание среды программирования

30

Для работы с рассмотренным ранее инструментарием алгоритмический язык Tur-

boPascal содержит следующие процедуры:

н

Создание исходного изображения на двух графических страницах

Видимая:=первая страница

Активная:=вторая

Фиксация изображения на требуемое время

Изменение координат изображения

Частичная или полная очистка активной страницы

Создание нового изображения на активной

странице

Смена местами видимой и активной страниц

Нет

Проверка

Да

 

выхода из

 

 

цикла

к

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]