Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 13:14, курсовая работа
Видеоадаптер может работать в двух режимах — в текстовом и в графическом. В текстовом режиме (например, режим командной строки DOS) в видеопамять записываются ASCII-символы. Знакогенератор, память знакогенератора и сдвиговый регистр формируют точечные изображения экранных ASCII-символов. Память знакогенератора содержит пикселные образы всех ASCII-символов (букв, цифр и знаков препинания). Знакогенератор преобразует данные из видеопамяти в последовательность пикселных битов и передает их в сдвиговый регистр. Сдвиговый регистр генерирует поток двоичных сигналов (битов). В это же время декодер атрибутов определяет режим отображения соответствующего ASCII-символа: стандартный, мигающий, инверсный, высокой яркости, а для цветных мониторов определяет цвет символа и цвет фона.
1. Теоретическая часть 3
1. 1. Текстовый и графический режимы 3
1.2. Переключение между текстовым и графическим режимами (инициализация и закрытие графики) 5
1.3. Основные графические функции. 8
2. Практическая часть 15
2.1. Постановка задачи 15
2.2. Описание алгоритма 16
2.3. Описание программы 17
Приложение А – Тексты программ 18
Приложение Б – Контрольный пример 20
Содержание
Видеоадаптер может работать в двух режимах — в текстовом и в графическом. В текстовом режиме (например, режим командной строки DOS) в видеопамять записываются ASCII-символы. Знакогенератор, память знакогенератора и сдвиговый регистр формируют точечные изображения экранных ASCII-символов. Память знакогенератора содержит пикселные образы всех ASCII-символов (букв, цифр и знаков препинания). Знакогенератор преобразует данные из видеопамяти в последовательность пикселных битов и передает их в сдвиговый регистр. Сдвиговый регистр генерирует поток двоичных сигналов (битов). В это же время декодер атрибутов определяет режим отображения соответствующего ASCII-символа: стандартный, мигающий, инверсный, высокой яркости, а для цветных мониторов определяет цвет символа и цвет фона. Генератор сигналов отвечает за превращение битовых потоков, поступающих из регистра сдвига и генератора атрибутов, в информационные и синхронизирующие сигналы, которые поступают на монитор, формируя собственно изображение. В зависимости от режима работы монитора генератор сигналов может вырабатывать аналоговые сигналы или сигналы ТТЛ. В настоящее время практически все цветные графические мониторы управляются аналоговыми видеосигналами.
В графическом режиме (например, в операционной системе Windows) ячейки видеопамяти содержат не ASCII-коды символов, а информацию о цвете каждого пиксела. То есть знакогенератор и его память, которые используются в текстовом режиме, в графическом режиме не задействуются. Например, в монохромной графике используется один бит на пиксел, в 16-цветной графике используются 4 бита на пиксел, в 256-цветной графике — 8 бит на пиксел и т.д. Коды пикселов из видеопамяти передаются контроллером ЭЛТ через знакогенератор без изменений. Затем они поступают непосредственно на сдвиговый регистр и на генератор сигналов. Именно генератор сигналов вырабатывает по командам контроллера ЭЛТ аналоговые или ТТЛ-видеосигналы (наряду с сигналами синхронизации).
Смена режима, как правило, выполняется через BIOS, так как эта операция не критична ко времени выполнения, но весьма трудна для программирования. Графическая плата IBM поддерживает два типа режимов. Во-первых, алфавитно-цифровой режим (называемый также "альфа" или "текстовым"), который позволяет вывести только 256 различных символов (при использовании специальных методов программирования EGA позволяет вывести до 512 символов одновременно). Во-вторых, графический режим, позволяющий осуществить индивидуальный вывод на экран любого элемента изображения (пикселя), а также 256 предопределенных символа. Графический режим иногда называют APA (All Point Addressable - адресующий все точки), поскольку он поддерживает индивидуальное управление всеми элементами изображения (пикселями).
EGA имеет 5 текстовых
и 7 графических режимов.
VGA позволяет расширить
приведенный список еще на
три дополнительных режима: монохромный
и цветной высокого разрешения
и цветной графический с
Стандартное состояние компьютера после запуска Турбо Паскаля - текстовый режим. Для того, чтобы использовать его графические средства, программист должен "определенным образом инициировать режим работы дисплейного адаптера". В графическом режиме работой дисплейного адаптера управляет графический драйвер.
Драйвер - это специальная программа, которая управляет техническими средствами компьютера. Для всех существующих типов адаптеров фирма Borland разработала графические драйверы (они имеют расширение .bgi и находятся на диске в одноименном подкаталоге).
Необходимые процедуры и функции для работы с графикой собраны стандартном модуле - Graph.
Инициализация графики производится с помощью процедуры InitGraph, которая имеет вид: InitGraph(GraphDriver, GraphMode, Path); где переменные GraphDriver и GraphMode имеют тип Integer, а переменная Path имеет тип String.
То, что записано в скобках, называется параметрами вызова процедуры
Простейшая программа, использующая графические возможности, может иметь вид:
Program Ex_1;
Uses Graph;
Var Gd, Gm: integer;
Begin
Gd:=VGA; { графический адаптер VGA }
Gm:=VGAhi; { графический режим VGAhi (640x480)x16 }
Initgraph(Gd,Gm,''); { Включить графический режим
if GraphResult = grOk then { Если режим включился успешно }
begin
line(0,0,639,479); { нарисовать отрезок прямой }
Readln;
CloseGraph; { выключений графического режима }
end;
End.
InitGraph(Gd,Gm:integer; Path:string);
Мы видим, что у процедуры InitGraph три параметра. В качестве первых двух параметров должы стоять имена целых (integer) переменных. Первый параметр Gd является кодом графического адаптера (т.е. электронной схемы, управляющей выводом информации на экран). Дело в том, что на IBM-совместимых компьютерах применяется ряд стандартных графических адаптеров, носящих названия CGA, EGA, VGA. По нашей программе можно догадаться, что в используемых нами компьютерах используется адаптер VGA (и компилятор сам "узнаёт" слово VGA и заменит его на нужное целое число). Каждый графический адаптер позволяет использовать несколько графических режимов, отличающихся количеством цветов и разрешаюшей способностью. Второй из параметров Gm как раз предназначен для того, чтобы указать, какой из режимов следует включить. Третий параметр Path является строкой (string), содержащей путь к файлу, который называется egavga.bgi. В этом файле содержится драйвер (такая специальная программа), необходимый для работы мониторов EGA и VGA в графическом режиме.
GraphDriver - целая переменная, определяющая тип драйвера. Процедура загружает драйвер в оперативную память и переводит адаптер в графический режим работы. Тип драйвера должен соответствовать типу графического адаптера. Для указания типа драйвера в модуле предопределены следующие константы:
CGA |
EGA |
EGAMono |
HercMono |
VGA |
MCGA |
EGA64 |
IBM8514 |
ATT400 |
PC3270 |
Detect = 0;
Целая переменная GraphMode задает режим работы графического адаптера. Многие адаптеры могут работать в нескольких режимах. Например, переменная GraphMode в момент обращения к InitGraph может иметь одно из следующих значений для адаптера VGA:
VGALo = 0; VGAMed = 1; VGAHi = 2;
CloseGraph
Выключение графического режима.
Условно весь модуль Graph можно подразделить на несколько функциональных групп по выполняемым действиям. Рассмотрим эти группы (внутри групп взяты основные функции, необходимые нам для первоначального ознакомления с графикой):
1) Инициализация графики,
InitGraph |
установление (инициализация) графического режима работы |
CloseGraph |
завершение работы с графикой |
DetectGraph |
определение драйвера |
FloodFill |
заливка замкнутого контура выбранным типом и цветом палитры |
RestoreCRTMode |
возврат в текстовый режим |
SetBkColor |
выбор и установка нового цвета закраски фона |
SetColor |
выбор и установка нового текущего цвета |
SetFillStyle |
выбор и установка нового шаблона и цвета заполнения |
2) Процедуры и функции для управления курсором и видеостраницами:
ClearDevice |
очистка текущего устройства вывода |
ClearViewPort |
очистка текущего окна |
GetMaxX |
получение максимально доступной координаты по оси X |
GetMaxY |
получение максимально доступной координаты по оси Y |
GetPixel |
получение текущего цвета точки экрана |
GetX |
получить значение координаты X |
GetY |
получить значение координаты Y |
MoveRel |
переместить курсор из данной текущей точки на заданное приращение. |
MoveTo |
переместить курсор из данной текущей точки в заданную точку |
3) Процедуры и функции для работы с "графическими примитивами":
Arc |
Рисует дугу |
Bar |
Рисует полосу |
Bar3D |
Рисует трехмерную полосу |
Circle |
Рисует окружность |
DrawPoly |
Рисует многоугольник |
Ellipse |
Рисует эллиптическую дугу или эллипс |
FillEllipse |
Рисует заполненный эллипс |
FillPoly |
Заполняет многоугольник |
Line, LineRel, LineTo |
Рисует линию |
Rectangle |
Рисует прямоугольник |
Sector |
Рисует сектор эллипса |
PutPixel |
Рисует точку |
4) Процедуры для работы с текстом
OutText |
Вывод текста |
OutTextXY |
Вывод текста |
Итак, для запуска графической системы нам необходимо:
1. Подключить модуль GRAPH
- библиотеку графических
Uses Graph;
2. Установить графический
режим с помощью двух
Описание некоторых графических процедур и функций.
Line(x1,y1,x2,y2: integer);
Как Вы уже догадались, процедура Line(x1,y1,x2,y2) рисует на экране отрезок, соединяющий точки (x1,y1) и (x2,y2). Например:
Program Ex_2; { нарисовать треугольник }
Uses Graph;
Var Gd, Gm: integer;
Begin
Gd:=VGA; { графический адаптер VGA }
Gm:=VGAhi; { графический режим VGAhi (640x480)x16 }
Initgraph(Gd,Gm,''); { Включить графический режим
if GraphResult = grOk then { Если режим включился успешно }
begin
line(120,210,520,210); { основание }
line(120,210,320,10); { левая сторона }
line(320,10,520,210); { правая сторона }
end;
End.
Текущий цвет рисования.
При выполнении описанной выше программы мы получим изображение треугольника из белых линий. Обладая цветным монитором VGA мы можем создавать рисунки используя различные цвета и оттенки. В любом случае рисование происходит так называемым "текущим цветом рисования". По умолчанию, текущий цвет рисования белый.
SetColor(Color: word);
Для изменения текущего цвета рисования, т.е. для задания цвета рисования прямых, окружностей, точек и пр. используется процедура SetColor. В качестве единственного её параметра Color нужно указать целое число, являющееся кодом цвета. Цвета кодируются в соответствии со следующей таблицей:
Black = 0 - чёрный
Blue = 1 - синий
Green = 2 - зелёный
Cyan = 3 - циановый
Red = 4 - красный
Magenta = 5 - сиреневый
Brown = 6 - коричневый
LightGray = 7 - светло-серый
DarkGray = 8 - тёмно-серый
LightBlue = 9 - голубой
LightGreen =10 - светло-зелёный
LightCyan =11 - светло-циановый
LightRed =12 - розовый
LightMagenta =13 - светло-сиреневый
Yellow =14 - жёлтый
White =15 - белый
Если Вы хорошо знаете английский язык, то Вам будет удобнее использовать не числа, а соответствующие им идентификаторы; если же Вы английский знаете плохо, то всё равно полезнее запомнить английские названия цветов, чем запоминать числа, кодирующие цвета.
Program Ex_3; { цветной треугольник }
Uses Graph;
Var Gd, Gm: integer;
Begin
Gd:=VGA; { графический адаптер VGA }
Gm:=VGAhi; { графический режим VGAhi (640x480)x16 }
Initgraph(Gd,Gm,''); { Включить графический режим
if GraphResult = grOk then { Если режим включился успешно }
begin
setcolor(lightmagenta);
line(120,210,520,210); { основание }
setcolor(lightcyan);
line(120,210,320,10); { левая сторона }
setcolor(green);
line(320,10,520,210); { правая сторона }
end;
End.
GetColor: word;
Возвращает текущий цвет рисования.
SetBkColor(color: word);
Вам ещё не один раз придётся столкнутся с понятием-характеристикой - "текущий". Текущий цвет, текущая координата, текущее значение и т.д. Данная процедура устанавливает текущий цвет фона. По умолчанию текущий цвет фона - чёрный.
GetBkColor: word;
Возвращает текущий цвет фона.
ClearDevice
Очищает графический экран закрашивая его в текущий цвет фона, устанавливает указатель текущей позиции в точку с координатами (0,0).
PutPixel(x,y:integer; Pixel:word);
Рисует точку с координатами (x,y) цветом Pixel.