- •Введение
- •Управление экраном в текстовом режиме
- •Установка текстового режима
- •Установка цвета и фона
- •Управление курсором.
- •Управление строками.
- •Управление звуком.
- •Текстовые окна.
- •Использование клавиатуры.
- •Организация меню пользователя. Элементы псевдографики.
- •Виды меню
- •Использование буфера экрана.
- •Управление экраном в графическом режиме.
- •Стандартные подпрограммы для работы в графическом режиме
- •Установка графического режима.
- •InitGraph (var Driver,Mode:integer; DriverPath:string) -
- •Координаты, графические окна.
- •Выбор цвета, стиля заполнения.
- •Геометрия
- •Точки и линии.
- •Многоугольники
- •Дуги, окружности, эллипсы
- •Вывод текста
- •Сохранение и выдача изображений
- •Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
- •Установки графических окон, страницы
- •Выбор палитры, заполнения
- •Геометрия
- •Установки вывода текста.
- •Организация библиотек пользователя
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Приложение 1. Кодировочная таблица пэвм.
- •Приложение 2. Константы графического режима.
Сохранение и выдача изображений
Для сохранения и выдачи изображений в модуле Graph определены подпрограммы: ImageSize, GetMem, FreeMem, PutImage,GetImage.
ImageSize(X1,Y1,X2,Y2:integer):word - функция определения количества байтов, необходимых для хранения прямоугольной области экрана. X1,X2,Y1,Y2 - координаты области. Если память,необходимая для хранения области больше или равна 64К, фиксируется ошибка графики grError.
GetMem(var P:pointer; size:word) - функция создает новую динамическую переменную заданного размера и помещает адрес блока в переменную - указатель P. Size - необходимый размер памяти для динамической переменной. Если свободной памяти нет,фиксируется ошибка.
Для освобождения занимаемой памяти используется соответствующая функция :
FreeMem(var P:pointer; size:word),
где
P - переменная-указатель, которой было присвоено значение функцией GetMem или оператором присваивания;
size - размер в байтах уничтожаемой динамической переменной. Ее размер должен совпадать с числом байт в памяти, распределенной ранее под эту переменную процедурой GetMem.
После вызова FreeMem, значение P становится неопределенным и последующие ссылки P будут ошибочны.
GetImage(X1,Y1,X2,Y2:integer; var BitMap) - процедура сохранения в памяти копии прямоугольного фрагмента изображения. X1,Y1,X2,Y2 - координаты, определяющие прямоугольную область экрана;
BipMap - переменная, куда будет помещена копия изображения. Определение размера для BipMap выполняется функцией ImageSize.
PutImage( X,Y:integer; var BitMap; BitBit:word) - процедура вывода в заданное место экрана копии фрагмента изображения, ранее помещенного в память процедурой GetImage.
X,Y - переменные, определяющие координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии из памяти. Координаты левого верхнего угла могут быть какими угодно, однако если выводимая копия не может разместиться на экране, она не выводится и экран остается без изменений.
BitMap - переменная , откуда будет копироваться изображение;
BitBit - переменная , определяющая способ копирования.
Параметр BitBit определяет способ взаимодействия вновь размещаемой копии с уже имеющимися на экране изображениями. Взаимодействие осуществляется путем применения кодируемых этим параметром логических операций к каждому биту копии и изображения.
Логическая операция определяется константами :
const
NortmalPut = 0; {замена существующего изображения на копию}
XorPut = 1; {исключительное ИЛИ}
OrPut = 2; {объединительное ИЛИ}
AndPut = 3; {логическое И}
NotPut = 4; {инверсия изображения}
Наиболее часто используются операции NormalPut, XorPut и NotPut. Первая из них просто стирает часть экрана и на это место помещает копию из памяти в том виде, как она там сохраняется.Операция NotPut делает то же самое, но копия выводится в инверсном виде, т.е. светящиеся пиксели заменяются на темные и наоборот. Повторный вывод с параметром XorPut фрагмента изображения на то же место экрана, откуда была получена копия, сотрет эту часть экрана.
Используя указанные процедуры можно создавать элементы движения графических изображений. Рассмотрим основные этапы построения движущихся изображений:
определить прямоугольную область экрана, в которой пост-
роить изображение обьекта, используя стандартные подпрограммы модуля Graph;
используя процедуру ImageSize, определить размер прямоугольной области в байтах для сохранения изображения;
процедурой New создать динамическую переменную для хранения изображения обьекта ;
поместить копию обьекта в динамическую память процедурой PutImage и удалить ее с экрана;
переместить текущий указатель в нужную точку экрана и вывести на экран копию сохраненного обьекта процедурой GetImage.
Для создания иллюзии движения графического изображения в каждый отдельный момент времени можно перемещаясь по экрану
выводить копию изображения процедурой GetImage с предваритель-
ным удалением предыдущей копии с экрана.
Наилучшее изображение обьекта можно получить, создав
несколько копий имитации движения, сохранив их в динамической
памяти и выводя последовательно одну за другой.
Пример. Вывод "летающей " тарелки.
uses Graph,Crt;
var
x,y,Driver,Mode:integer;
p:pointer;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
SetColor(2);
FillEllipse(30,40,25,10);
SetColor(3);
Line(38,40,15,10);
Line(22,40,51,10);
GetMem(p,ImageSize(0,0,60,60)); { создание динамической пе-
ременной для хранения прямоугольного фрагмента экрана}
GetImage(0,0,60,60,p^); { сохранение копии в динамической
x:=0; y:=0; памяти}
repeat
PutImage(x,y,p^,XORput);
x:=x+5;
y:=y+1;
PutImage(x,y,p^,XORput);
until KeyPressed;
CloseGraph
end.