Работа видеоадаптера

Автор работы: Пользователь скрыл имя, 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

Файлы: 1 файл

курсоввая.doc

— 113.50 Кб (Скачать файл)

Содержание

 

 

1. Теоретическая  часть

1. 1. Текстовый и графический режимы

 

Видеоадаптер может  работать в двух режимах — в  текстовом и в графическом. В  текстовом режиме (например, режим  командной строки DOS) в видеопамять  записываются ASCII-символы. Знакогенератор, память знакогенератора и сдвиговый регистр формируют точечные изображения экранных ASCII-символов. Память знакогенератора содержит пикселные образы всех ASCII-символов (букв, цифр и знаков препинания). Знакогенератор преобразует данные из видеопамяти в последовательность пикселных битов и передает их в сдвиговый регистр. Сдвиговый регистр генерирует поток двоичных сигналов (битов). В это же время декодер атрибутов определяет режим отображения соответствующего ASCII-символа: стандартный, мигающий, инверсный, высокой яркости, а для цветных мониторов определяет цвет символа и цвет фона. Генератор сигналов отвечает за превращение битовых потоков, поступающих из регистра сдвига и генератора атрибутов, в информационные и синхронизирующие сигналы, которые поступают на монитор, формируя собственно изображение. В зависимости от режима работы монитора генератор сигналов может вырабатывать аналоговые сигналы или сигналы ТТЛ. В настоящее время практически все цветные графические мониторы управляются аналоговыми видеосигналами.

В графическом режиме (например, в операционной системе Windows) ячейки видеопамяти содержат не ASCII-коды символов, а информацию о цвете  каждого пиксела. То есть знакогенератор и его память, которые используются в текстовом режиме, в графическом режиме не задействуются. Например, в монохромной графике используется один бит на пиксел, в 16-цветной графике используются 4 бита на пиксел, в 256-цветной графике — 8 бит на пиксел и т.д. Коды пикселов из видеопамяти передаются контроллером ЭЛТ через знакогенератор без изменений. Затем они поступают непосредственно на сдвиговый регистр и на генератор сигналов. Именно генератор сигналов вырабатывает по командам контроллера ЭЛТ аналоговые или ТТЛ-видеосигналы (наряду с сигналами синхронизации).

Смена режима, как правило, выполняется через BIOS, так как  эта операция не критична ко времени  выполнения, но весьма трудна для программирования. Графическая плата IBM поддерживает два типа режимов. Во-первых, алфавитно-цифровой режим (называемый также "альфа" или "текстовым"), который позволяет вывести только 256 различных символов (при использовании специальных методов программирования EGA позволяет вывести до 512 символов одновременно). Во-вторых, графический режим, позволяющий осуществить индивидуальный вывод на экран любого элемента изображения (пикселя), а также 256 предопределенных символа. Графический режим иногда называют APA (All Point Addressable - адресующий все точки), поскольку он поддерживает индивидуальное управление всеми элементами изображения (пикселями).

EGA имеет 5 текстовых  и 7 графических режимов. Текстовые  режимы имеют номера 0 - 3 и 7. Режимы 0 - 3 не отличаются от режимов  0 - 3 CGA, а режим 7 близок к режиму 7 монохромного адаптера. Графические  режимы 4 - 6 EGA не отличаются от режимов 4 - 6 CGA. Новые графические режимы (предусматривающие высокое разрешение и/или большее количество цветов) пронумерованы 0dh - 10h. После установки режима информация может быть записана на экран (или считана с него) с помощью вызова функций BIOS или непосредственного доступа к видеопамяти.

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

 

1.2. Переключение между текстовым и графическим режимами (инициализация и закрытие графики)

 

Стандартное состояние  компьютера после запуска Турбо  Паскаля - текстовый режим. Для того, чтобы использовать его графические средства, программист должен "определенным образом инициировать режим работы дисплейного адаптера". В графическом режиме работой дисплейного адаптера управляет графический драйвер.

Драйвер - это специальная программа, которая управляет техническими средствами компьютера. Для всех существующих типов адаптеров фирма 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

Выключение графического режима.

 

1.3. Основные графические функции.

 

Условно весь модуль 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.

Информация о работе Работа видеоадаптера