Понеділок, 18.02.2019, 22:29
Гость

Мішатронік

Автор - Кренцін Михайло

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Вам легко дається програмування
Всього відповідей: 1
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0




Работа с графикой в Паскале

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

Формирование изображения на экране

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

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

Видеопамять и похожа, и в то же время не похожа на RAM . Обычная память соединена с центральным процессором специальным устройством, которое называется шина данных. Не останавливаясь подробнее на конструкции шины данных, скажем лишь, что это просто пакет проводов, количество которых кратно двум. Можно сказать, что чем больше проводов в пакете, тем быстрее происходит обмен данными между процессором и памятью. Современные Pentium -машины имеют 32-разрядную шину, т.е. процессор может сразу читать 4 байта из памяти (и столько же в нее записывать). Разрядность шины данных – одно из самых узких мест в конструкции компьютера.

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

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

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

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

Движение луча по экрану происходит с огромной скоростью. Чтобы изображение, которое воспринимает человек, не было мерцающим, весь цикл – от первой до последней строки – должен быть закончен за 1/60 секунды (или еще быстрее). Следовательно, за секунду происходит не менее 60 проходов луча по всему экрану, строка за строкой. Такая схема формирования изображения называется растром. После того, как луч доходит до последней точки последней строки (до правого нижнего угла экрана), он мгновенно по диагонали переносится в начало первой строки экрана (левый верхний угол), и процесс повторяется.

Формирование цветного изображения осуществляется не одним, а тремя электронными лучами (красным, зеленым и синим), перемещающимся по экрану одновременно. Три луча подсвечивают сразу три элемента экрана, расположенных на очень незначительном угловом расстоянии друг от друга, поэтому человеческий глаз воспринимает эти три элемента как одну точку. Благодаря различной интенсивности свечения каждой из трех точек и эффекту аддитивного смешения трех цветов такая составная точка может иметь любой цветовой оттенок. Качество изображения тем выше, чем меньше расстояние между двумя отдельными точками. В современных мониторах расстояние между точками не превышает 0.25–0.26 мм.

Вернемся к видеоадаптеру. Помимо всего прочего, он должен подавать специальные синхронизирующие сигналы электронной пушке для правильного формирования изображения на экране. Первый синхронизирующий сигнал – V -сигнал – подается для начала сканирования экрана; второй сигнал – H -сигнал – для начала сканирования очередной строки. Кроме того, видеоадаптер должен управлять интенсивностью сканирующего луча. Интенсивность луча может меняться при прохождении каждой растровой точки, а значит можно произвольно менять и интенсивность свечения точки.

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

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

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

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

Uses graph ;

Взаимодействие программы и видеосистемы в графических режимах обеспечивают драйверы. Драйверы собраны в файлах, имеющих расширение BGI : CGA . BGI , EGAVGA . BGI , HERC . BGI , IBM 8514. BGI , ATT . BGI , PC 3270. BGI и др. Драйвер – это специальная программа, осуществляющая управление тем или иным техническим средством ПК. Графический драйвер управляет графическим адаптером в графическом режиме.

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

Для инициализации графического режима используется процедура:

InitGraph(var Driver, Mode: integer; Path:string);

Где Driver – переменная типа integer , определяющая тип графического драйвера; Mode – переменная того же типа, задающая режим работы графического адаптера; Path – выражение типа string , содержащее путь доступа к файлу драйвера.

Таблица 1. Константы, определяющие графический режим

Графический драйвер

Константа режима

Растр

Палитра

Число страниц

Имя

Значение

Имя

Значение

Detect

0

Выбор драйвера автоматически

CGA

1

CgaC0

0

320*200

C0

1

CgaC1

1

320*200

C1

1

CgaC2

2

320*200

C2

1

CgaC3

3

320*200

C3

1

CgaHi

4

640*200

2 цвета

1

MCGA

2

McgaC0

0

320*200

C0

1

McgaC1

1

320*200

C1

1

McgaC2

2

320*200

C2

1

McgaC3

3

320*200

C3

1

mcgaMed

4

640*200

2 цвета

1

McgaHi

5

640*480

2 цвета

1

EGA

3

EgaLo

0

640*200

16 цвет.

4

EgaHi

1

640*350

16 цвет.

2

VGA

9

VgaLo

0

640*200

16 цвет.

2

VgaMed

1

640*350

16 цвет.

2

VgaHi

2

640*480

16 цвет.

1


Пример фрагмента программы, где инициализируется графический режим
Program primer ;
Uses graph ; 
Var 
   D , m : integer ; {переменные для установки драйвера и режима работы} 
Begin 
   D :=9; 
   M :=2; 
   InitGraph ( d , m , ‘здесь нужно указать путь к драйверу EGAVGA . BGI ’} 
……

Наиболее простой способ выбора графического драйвера и режима – автоматический ( detect ).

Пример фрагмента программы, где инициализируется графический режим
Program primer ; 
Uses graph ; 
Var D , m : integer ; {переменные для установки драйвера и режима работы} 
Begin 
   D := detect ; 
   InitGraph ( d , m , ‘здесь нужно указать путь к драйверу EGAVGA . BGI ’}

Проверка результата инициализации графического режима. Для проверки успешности инициализации графического режима существует функция GraphResult , которая имеет тип результата integer , в котором закодирован результат последнего обращения к графическим процедурам. Если ошибка не обнаружена, значением функции будет 0, в противном случае – отрицательное число, имеющее следующий смысл:

  • GrOk =0; {нет ошибок}
  • GrInitGraph =-1{не инициирован графический режим}
  • GrNotDetect =-2 {не определен тип драйвера}
  • GrFileNotFind =-3 {не найден графический драйвер}
  • GrInvalidDriver =-4 {неправильный тип драйвера}
  • GrNoLoadMem =-5 {нет памяти для размещения драйвера}
  • GrNoScanMem =-6 {нет памяти для просмотра областей}
  • GrNoFloodMem =-7 {нет памяти для закраски областей}
  • GrFontNotFound =-8 {не найден файл со шрифтом}
  • GrNoFontMem =-9 {нет памяти для размещения шрифта}
  • GrInvalidMode =-10 {неправильный графический режим}
  • GrError =-11 {общая ошибка}
  • GrIOError =-12 {ошибка ввода-вывода}
  • GrInvalidFont =-13 {неправильный формат шрифта}
  • GrInvalidFontNum =-14 {неправильный номер шрифта}

Завершение работы графического режима. Завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана процедураCloseGraph .

Запомните! Любая программа, использующая графический режим, будет иметь одну и ту же структуру:

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

Напишем заготовку типовой программы работы с графикой:

Пример заготовки к графическому режиму
Program primer ; 
Uses graph ; 
Var D , m : integer : {переменные для установки драйвера, режима} 
Begin 
   D:= detect; 
   InirGraph(d,m, ‘ путь к драйверу ’); 
   If GrapfResult =0 then {если инициализация прошла успешно
Форма входа
Пошук
Календар
«  Лютий 2019  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728
Друзі сайту
Погода у Вінниці


Єдина Країна! Единая Страна!