Работа с изображениями в GraphABC
О работе с изображениями следует прочесть в разделе 10 учебного пособия «Работа с графикой в системе PascalABC.NET». Сделаем ряд замечаний относительно этого текста.
Замечание 1. Вместо операторов
которые используются в учебном пособии для создания новой картинки размера 30 × 30, используйте код
Он короче и понятней, а значит лучше.
Замечание 2. Для сохранения картинки в файл используйте следующий код.
Midlet Pascal. Изображения и кнопки
Всем привет! Продолжаем изучать Midlet Pascal. В прошлой статье я рассказал о самых основах этого языка. В этой статье погорим о вещах более интересных — немного порисуем, рассмотрим вывод изображений и обработку нажатий пользователя на кнопки.
Стандартные фигуры изображать в Midlet Pascal очень даже просто. Вот, например, нарисуем синий прямоугольник 100х100 и в нем белым текстом напишем что-нибудь. Делается это так. За цвет отвечает процедура SetColor, где в скобках указываются три цвета, из которых получится тот, который нам нужен. Цвета указываются в таком порядке: красный, зеленый, синий. Значение каждого из них может быть от 0 до 255. Например, если написать так:
то мы получим ярко-зеленый цвет, а если так:
Поехали дальше. Прямоугольник мы возьмем закрашенный — для это есть процедура FillRect, где в скобках пишутся координаты левого верхнего угла это прямоугольника, ширина и высота. В итоге получаем что-то вроде этого:
Прямоугольники с линиями — это, конечно, хорошо, но явно недостаточно, чтобы сделать хорошую игрушку. Неплохо было бы показать какую-нибудь красивую картинку, чем мы сейчас и займемся. С картинками в Midlet Pascal дело обстоит неважно, поддерживается только формат PNG. Поэтому все изображения, которые Вы хотите вывести на экран нужно переводить именно в этот формат. Для конвертирования изображений есть много программ и я не буду на этом останавливаться. Скажу лишь, что лично мне ближе Photoshop. Там можно и картинку отредактировать и сохранить ее как нужно. Ну так вот. Нашли Вы хорошую картинку, теперь самое время добавить ее к нашей программе. Для этого в меню выбираем «Project -> Import resource file», находим нашу картинку и добавляем ее. Она должна появиться в списке файлов слева (вкладка «Files»). Если у Вас нет такой вкладки, ее можно включить через «View -> Files». Допустим Ваша картинка называется «picture.png». Теперь в программе пишем:
Означает это примерно следующее. LoadImage загружает картинку из ресурсного файла (символ «/» перед названием писать обязательно, иначе ничего не выйдет). DrawImage выводит загруженную картинку на экран в точку с координатами (10, 10). Можно (а иногда даже и нужно) сделать немного по-другому. Сначала загрузить изображение в какую-нибудь переменную (которая в этом случае будет иметь тип image), а потом уже действовать через эту переменную. Т.е. примерно так:
Для чего это нужно? Дело в том, что последний вариант работает гораздо быстрее. Это, в принципе, не имеет значения, если Вам нужно вывести одно-два небольших изображения, а вот если этих изображений несколько десятков и пишете Вы очень динамичную игру — тогда лучше делать через переменные. Да и с переменными удобнее работать, особенно если оформить это дело в массив.
Ну что ж — с картинками более-менее разобрались (хотя настоятельно советую поэксперементировать самостоятельно — я рассказал только основы, а еще есть много чего интересного по этой теме). Допустим Вы нарисовали замечательную картинку (например, главного героя игры), изобразили ее на экране и все вроде бы хорошо. Но чего-то не хватает. А не хватает движений. Пользователь будет упорно жать на все кнопки подряд, но ничего не случится.
Герой игры не сдвинется с места. А все потому, что нужно было еще запрограммировать и обработку нажатий на клавиши. Ну что ж, займемся этим. Здесь все очень просто. Поэтому объясню вкраце. Есть две основных функции: GetKeyClicked и GetKeyPressed, которые возвращают код нажатой клавиши. Разница между ними лишь в том, что первая возвращает последнюю нажатую клавишу, а вторая — клавишу, нажатую в данных момент. Разные телефоны (и устройства вообще) могут возвратить для одной и той же клавиши разные коды и тогда программа, которая прекрасно работала на одном телефоне, совершенно откажется работать на другом. Эту проблему решает функция KeyToAction, которая сама определяет, какая клавиша была нажата и выдает ее значение в виде константы. Например, если был нажат джойстик вверх, то значение будет GA_UP, если вправо, то — GA_RIGHT. А теперь поясню все вышесказанное на практике:
Этот пример был взят из помощи по Midlet Pascal. Данный цикл (а значит и программа в данном случае) будет работать до тех пор, пока не будет нажат центр джойстика. Подробнее про константы читайте в справке.
Ну что же. Вы узнали немного о выводе изображений и обработке нажатий на клавиши. А теперь я хочу показать, как все это применить на практике. Напишем небольшую игрушку, применяя сказанное выше. По правде говоря, это даже и не игрушка пока, а лишь заготовка под нее, но для примера вполне сойдет. Мы будем управлять летающей тарелкой. Для этого надо нарисовать картинку самой тарелки и фон космоса, где, собсвенно и будет происходить действие. Далее приведу просто текст программы. Здесь полно комментариев и, я думаю, Вы разберетесь здесь без проблем.
Эта программа полностью рабочая, но сделана довольно упрощенно. Вы можете попробовать сделать ее лучше. Картинки я прикладывать не стал, ибо художник из меня неважный.
Ну вот и все на сегодня. В следующий раз мы добавим к нашей игре музыкальное сопроводжение.
Как вставить картинку в паскале
Рассмотрим более сложную программу с выводом изображения на экран мобильного телефона. Это уже более интересно! Не так ли? Что ж, приступим к рассмотрению этой интересной программы. В этой программе идет загрузка изображения «image.png» для последующего вывода на экран мобильного телефона.
Но прежде давайте разберемся, как добавить в проект файлы рисунков, звуков, текстов и т.п., используемые программой. Такие файлы называются «файлы ресурсов».
Слева от окна, в котором вы пишете текст программы (исходный текст), находится «инспектор» вашего проекта. В инспекторе есть две вкладки — «Файлы» и «Свойства». На вкладке «Файлы» находятся список файлов вашего проекта, а в «Свойствах» описана конфигурация создаваемой программы.
Выберем закладку «Файлы». В папке с проектом есть каталог под названием «Файлы ресурсов». Когда вы создаете новый проект, там находится только один файл «icon.png», в котором храниться картинка — иконка проекта.
Давайте добавим к ресурсным файлам картинку, которую мы будем выводить:
image.png
Щелкните правой кнопкой мыши, по расположенной выше картинке image.png, выберите «Сохранить изображение» и укажите папку, в которую надо сохранить файл, например .
ВАЖНО! MIDletPascal умеет «работать» только с изображениями в формате «png».
Теперь создадим новый проект. Назовем его, например: ImageProgram. Если забыли, как это делается, смотрите главу «Установка и настройка MIDletPascal». Затем добавим к ресурсам проекта файл image.png. Для этого выбираем в верхнем меню пункт «Проект», а затем — «Импорт файла»:
Появится обычный диалог выбора файла. Выбираем нужный и нажимаем «Открыть»:
Добавленный в проект файл должен появиться в списке файлов на вкладке «Файлы» слева (если вы закрыли вкладку, ее можно включить выбрав в меню «Вид» -> «Файлы»):
Если вам потребуется удалить файл ресурса, то выделите его в списке файлов ресурсов, щелкнув по нему мышкой, а затем выберите «Проект» -> «Удалить из проекта» (или просто нажмите сочетание клавиш Shift+Del).
Простейшая программе для вывода картинки состоит из одной строки (не считая, конечно, присутствующих всегда program, begin и end):
Означает это примерно следующее. LoadImage загружает картинку из ресурсного файла (символ «/» перед названием писать обязательно, иначе ничего не выйдет). DrawImage выводит загруженную картинку на экран в точку с координатами (0,0).
Однако, такой вариант вывода картинки годится лишь, когда изображение выводится в программе один раз. Когда необходимо много раз выводить одну и ту же картинку (например, в игре), то многократное считывание ее из ресурсного файла с помощью LoadImage существенно замедлит работу программы.
С точки зрения быстродействия программы, гораздо выгоднее предварительно загрузить картинку в оперативную память, откуда она будет выводиться гораздо быстрее, чем из ресурсного файла.
Если картинка или другие данные хранятся в оперативной памяти, то для обращения к ним используются условные имена (их называют идентификаторами), которые указывают, с какими данными работает в данный момент программа. Область памяти, предназначенную для хранения каких-либо данных и обозначенную условным именем, принято называть переменной, а хранящиеся в ней данные — значением переменной. Значение переменной может меняться в ходе выполнения программы (то есть в эту область памяти могут быть записаны другие данные).
Для того, чтобы программа выделила соответствующее место в памяти для хранения переменных, их надо объявить до того, как будет написана первая команда (до первого begin).
Объявление переменных в MIDletPascal (как и в стандартном PASCAL) начинается со слова var (от англ. variable — переменная). Затем указываются имена переменных и типы данных, которые будут в них хранится. Между именем переменной и ее типом ставится двоеточие:
var
pic: Image;
В данном примере мы объявили переменную с именем pic, имеющую тип Image, предназначенный для хранения графических изображений.
ВАЖНО! Обратите внимание на точку с запятой в конце объявления переменной pic. Этот символ всегда ставится в конце конструкций языка PASCAL (MIDletPascal).
Имена переменных вы определяете сами, учтывая при этом следующие правила:
- Имя переменной может состоять только из букв латинского алфавита, цифр и символа подчеркивания.
- Имя переменной всегда должно начинаться с буквы.
- Имя переменной не может совпадать с зарезервированными словами языка программирования (например, нельзя назвать переменную именем begin или program).
- MIDletPascal (как и PASCAL) не различает большие и маленькие буквы, поэтому имена переменных, например, SUMMA и summa считаются одинаковыми (так же и в отношении команд: drawText, DrawText и drawtext — одно и то же).
Операция записи в переменную ее значения называется присваиванием и обозначается сочетанием двух символов (двоеточие и равно): . Слева от обозначения операции присваивания указывается имя переменной, справа — присваиваемое (заносимое в переменную) значение. Поэтому, чтобы считать в переменную pic картинку из ресурсного файла img.png, в программе следует написать следующую строчку:
pic:= LoadImage(‘/image.png’);
Чтобы использовать значение, хранящихся в переменной данных, следует указывать имя переменной. В нашем случае, мы должны передать процедуре DrawImage данные выводимой картинки. В предыдущем примере их напрямую возвращала функция LoadImage. Темеперь же эти данные занесены в переменную pic, поэтому мы указываем ее в качестве места нахождения картинки:
DrawImage(pic,0,0);
Теперь вывод изображения происходит из оперативной памяти, что гораздо быстрее, чем считывание из ресурсного файла.
Используя то, о чем говорилось выше, получаем второй вариант программы вывода картинки на экран мобильного телефона:
Программирование. Графика Pascal-Паскаль
В современных компьютерах изображения на экране строятся в виде растров, и всегда прямоугольных.
Пример растра и изображения, построенного на нем:
На рисунке вы видите сильно увеличенную картинку, на самом же деле элементарные точки, из которых состоит изображение, или пиксели, должны быть очень маленькими, чтобы глаз воспринимал картинку как единое целое. Пиксель ( Pixel ) – сокращение от Picture Element (элемент рисунка).
Экраны цветных мониторов состоят из прямоугольной решетки точек (пикселей), светящихся разным цветом. Каждый цветной пиксель образован тремя более мелкими по площади участками красного, зеленого и синего цветов. При свечении этих участков с разной интенсивностью цвета смешиваются, создавая элементы изображения различных оттенков и яркости.
Важной характеристикой растра является его расширение, т.е. количество точек (пикселей) на единицу длины. Чем это число выше, тем более мелкими являются сами пиксели, и, соответственно, более плотно они располагаются на плоскости, что и приводит к тому, что мы воспринимаем их как единое, цельное изображение. Из года в год разрешающая способность мониторов, принтеров, сканеров и т.п. растет.
Итак, на растровом устройстве отображения любая фигура состоит из множества точек пикселей. Естественно, положение каждой точки изображения задано координатами X и Y . Координаты – целые числа, они задают номера колонки и строки растра и не зависят от физического размера экрана. Оси координат направлены следующим образом: горизонтальная ось X направлена слева направо; вертикальная ось Y направлена сверху вниз; верхний левый угол имеет координаты (0,0).
Очевидно, что запись изображения требует хранения информации о положении множества точек, для каждой из которых должен быть задан цвет. Цветное изображение получается смешиванием трех основных цветов – красного, зеленого и синего. Такая модель представления цвета называется моделью RGB ( Red — Green — Blue ). Управляя интенсивностью компонентов, можно получить различные оттенки и степени интенсивности цвета. В частности, для получения градаций серого надо взять интенсивности трех основных цветов равными друг другу.
В современных SVGA мониторах предусмотрено, как правило, по 2 6=64 уровня интенсивности каждого из основных цветов, таким образом, в целом можно получить (2 6) 3=262144 цвета. Для представления большего числа цветов необходим больший объем памяти. Один бит может кодировать два цвета: 1 – белый, 0 – черный. Два бита могут хранить 2 2=4 цветовых комбинации, 4 бита – 16, 8 бит – 256, 16 бит – 65536, 32 бита – 4294967296.
Если для каждой точки задавать уровни красного, зеленого и синего цветов, то потребуется достаточно большой объем памяти для хранения информации об изображении. Для сокращения объема памяти используются палитры. При этом ограничиваются некоторым количеством цветов, например 16 или 256, каждому из цветов присваивается номер (соответственно, от 0 до 15 или от 0 до 255), и при записи изображения используют именно этот код. «Точка цвета номер 5». Информация о палитре, то есть данные, сколько красного, зеленого и синего нужно взять для получения «цвета номер 5», хранится и используется отдельно от записи изображения.
Важное понятие в машинной графике – графический примитив – совокупность пикселей, определяющая некоторую геометрическую фигуру. Наиболее распространенные примитивы – это точка, линия, прямоугольник, закрашенный прямоугольник, окружность и эллипс.
Растровые изображения обладают одним очень существенным недостатком: их трудно увеличивать или уменьшать, т.е. масштабировать. При уменьшении растрового изображения несколько соседних точек преобразуются в одну, поэтому теряется разборчивость мелких деталей. При увеличении – увеличивается размер каждой точки, поэтому появляется ступенчатый эффект. Кроме того растровые изображения занимают много места в памяти.
Чтобы избежать указанных проблем, изобрели так называемый векторный способ кодирования изображений.
Векторный способ представления графики заключается в том, что геометрические фигуры, кривые и прямые линии, составляющие рисунок, хранятся в памяти компьютера в виде математических формул и геометрических абстракций: круг, квадрат, эллипс и т.п. Для каждого примитива существуют свои характерные параметры. Например, для отрезка – это координаты концов; для окружности – координаты центра и радиус. Т.е. размеры, кривизна, местоположение элементов изображения хранятся в виде числовых коэффициентов. Благодаря этому появляется возможность масштабировать изображения, поворачивать, подвергать любым другим геометрическим преобразованиям с помощью простых математических операций, в частности, простым умножением параметров на коэффициент масштабирования. При этом качество изображения не меняется.
Формирование изображения на экране
Из книги Румянцева Дмитрия, Монастырского Леонида «Путь программиста: Опыт созидания личности программиста». – М.: «Издательский Дом ИНФРА-М», 2000.
Программисту не обязательно знать технические подробности конструкции монитора, но общее представление о его схеме он иметь должен. Еще важнее представлять, как программа работает с памятью, когда осуществляет вывод информации на какое-либо из устройств визуального отображения, подключенных к компьютеру.
Участок оперативной памяти компьютера, где хранится информация об изображении, появляющемся на экране, называется видеопамятью. Иногда эту область называют видеобуфером. Видеопамять занимает определенную область в адресном пространстве оперативной памяти компьютера, следовательно, видеопамять имеет ограниченный размер.
Видеопамять и похожа, и в то же время не похожа на 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 . Для подключения библиотеки графических функций и процедур необходимо подключить модуль к вашей программе строкой
Формирование изображения на экране
Программисту не обязательно знать технические подробности конструкции монитора, но общее представление о его схеме он иметь должен. Еще важнее представлять, как программа работает с памятью, когда осуществляет вывод информации на какое-либо из устройств визуального отображения, подключенных к компьютеру.
Участок оперативной памяти компьютера, где хранится информация об изображении, появляющемся на экране, называется видеопамятью. Иногда эту область называют видеобуфером. Видеопамять занимает определенную область в адресном пространстве оперативной памяти компьютера, следовательно, видеопамять имеет ограниченный размер.
Видеопамять и похожа, и в то же время не похожа на 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 . Для подключения библиотеки графических функций и процедур необходимо подключить модуль к вашей программе строкой
Взаимодействие программы и видеосистемы в графических режимах обеспечивают драйверы. Драйверы собраны в файлах, имеющих расширение BGI : CGA . BGI , EGAVGA . BGI , HERC . BGI , IBM 8514. BGI , ATT . BGI , PC 3270. BGI и др. Драйвер – это специальная программа, осуществляющая управление тем или иным техническим средством ПК. Графический драйвер управляет графическим адаптером в графическом режиме.
Графические возможности конкретного адаптера определяются разрешением экрана, т.е. общим количеством пикселей, а также количеством цветов. Кроме того, многие адаптеры могут работать с несколькими графическими страницами.
Для инициализации графического режима используется процедура:
Где Driver – переменная типа integer , определяющая тип графического драйвера; Mode – переменная того же типа, задающая режим работы графического адаптера; Path – выражение типа string , содержащее путь доступа к файлу драйвера.