Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
инаты
левого верхнего и правого нижнего узлов сохраняемой области экрана.
BitMap - нетипизированный параметр, указывающий на динамическую пе-
ременную хранения рассматриваемого изображения,которая создается
предварительно процедурой GetMem.
Приведем фрагмент программы, в которой обеспечивается сохране-
ние в динамической памяти прямоугольной области экрана с координа-
тами левого верхнего угла (50,50) и правого нижнего угла (100,100):
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
.......
var p:pointer;
Size:word;
begin {тело программы}
........
Size:=ImageSize(50,50,100,100);
If MaxAvail<Size then begin RestoreCrtMode;
writeln(Мало динамической памяти);
Halt(1) end
else begin GetMem(p,Size);
GetImage(50,50,100,100,p^);
end;
........
end. {конец программы}
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure PutImage(X,Y:integer; var BitMap;BitBlt:word);
Выводит в заданное место экрана хранимое в динамической памяти
растровое изображение и при необходимости определенным образом ком-
бинирует его с предшествующим экранным изображением.
(X,Y) - Координаты верхнего левого угла размещения на экране
выводимого прямоугольного образа.
BitMap - Указывает на динамическую переменную хранения выводи-
мого изображения.
BitBlt - Определяет поточечную операцию между имеющимся и
выводимым изображениями и может принимать значения
следующих операций:
NormalPut = 0; - простое замещение - исходное изображение замещается
выводимым
XORPut = 1; - сложение по модулю 2 - коды цветов одноименных то-
чек складываются по модулю 2
Например, если точку с цветом 4(красный) вывести в точку с
цветом 4(красный), то на экране получим точку с цветом, код которого
соответствует значению следующего выражения:
4(10)+4(10) = 0100(2)+0100(2) = 0000(2) = 0(10) ,
т.е. получим точку черного цвета.
OrPut = 2; - поразрядная операция ИЛИ - выполняется поточечная
операция ИЛИ
Например, 4(10) или 4(10)=0100(2)или 0100(2)=0100(2)=4(10),
т.е. получим точку того же цвета.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
AndPut = 3 - поразрядная операция И - выполняется поточечная
операция И
Например, 4(10)&4(10)=0100(2)&0100(2)=0100(2)= 4(10),
т.е. получим точку того же цвета.
NotPut = 4 - замещение с поразрядной инверсией - полное замещени ис-
ходного изображения в области вывода
предварительно инвертированным выво-
димым изображением
Например, точка с цветом 4(10) будет заменена точкой с цветом
- ----
4(10)= 0100(2) = 1011(2) = 11(10) - светло-бирюзовый
Процедура никогда не выполняет отсечения выводимого изображе-
ния на границах текущего окна просмотра,если при этом оно не выходит
за границы экрана. Если же выходит, то изображение не выводится
вовсе, если это левая верхняя или правая границы экрана,и отсекается
если это нижняя часть.
При неоднократном использовании динамической памяти с разными
динамическими переменными она бысто "засоряется" и становится непри-
годной к использованию. Чтобы этого избежать следует регулярно унич-
тожать использованные динамические переменные. Для этого существует
в модуле Sistem процедура Dispose.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure Dispos(varp:pointer);
Уничтожает динамическую переменную, на которую указывает р и
возвращает освобожденную память в пул динамической памяти системы.
После использования данной процедуры значение ссылочной переменной
становится неопределенным и обращение р^ приводит к ошибке.Необходи-
мо вновь создать динамическую переменную.
Приведем пример программы, которая создает эффект движения по
экрану обьекта в области 50*50 пикселов, первоначально размещенного
у левой границы экрана, к его правой границе:
.......
var p:pointer;
I:integer;
......
begin
......
GetMem(p,ImageSize(0,50,50,100)); {выделение динамической памяти}
GetImage(0,50,50,100,p^); {сохранение обьекта в памяти}
for I:=1 to (GetMaxX-50) do {перемещение обьекта}
begin PutImage(I-1,50,p^,XORPut);{уничтожение обьекта в прежнем
состоянии}
PutImage(I-1,50,p^,NormalPut);{копирование обьекта в новое
end; состояние
Dispose(p); {освобождение памяти}
......
end.
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
1 Проиллюстрируем приведенный выше пример:
#
ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН
* procedure SetActivePage(Page:word);
Направляет весь последующий графический выод на страницу видео-
буфера, задаваемую параметром Page. Эта страница может и не отобра-
жаться в это время на экране дисплея. Таким образом обеспечивается
построение новых изображений за счет времени просмотра текущих,чтобы
затем мгновенно обновить экран и создать эффект движения.
Лабораторные компьютеры поддерживают двухстраничную организацию
видеобу?/p>