|
Горбачев Л.И. Основы программирования в среде Turbo Pascal.
[НАЗАД]
[ДАЛЕЕ]
7. Сохранение образов графических изображений в оперативной памяти и их
восстановление на экране.
При работе в графическом режиме часто возникает необходимость
запоминания определенной части графического изображения в отдельной области
оперативной памяти, с тем чтобы в дальнейшем быстро восстановить это изображение
на экране. Использование оперативной памяти для сохранения графических
изображений полезно для обеспечения запоминания последовательности меню и при
программировании движущихся изображений и др.
Сохранение и восстановление графических изображений обеспечивается
следующими процедурами и функциями модуля Graph:
- GetImage(X1, Y1, X2, Y2: integer; var BitMap); - сохраняет в оперативной
памяти образ прямоугольной области графического изображения экрана. X1, Y1 -
координаты верхнего левого угла прямоугольной области, а X2, Y2 - координаты
нижнего правого угла. Изображение запоминается в переменной BitMap. Размер
BitMap должен быть на 4 байта больше, чем необходимо для сохранения заданного
объема графического изображения, поскольку в этих байтах запоминается ширина и
высота сохраняемой прямоугольной области экрана.
- ImageSize(X1, Y1, X2, Y2: integer): word; - возвращает количество байт,
необходимое для сохранения прямоугольной области графического изображения экрана
с координатами (X1, Y1, X2, Y2). Возвращаемое ImageSize значение включает
необходимую память для запоминания высоты и ширины прямоугольной области (4
байта). Если объем оперативной памяти, необходимой для сохранения прямоугольной
области графического изображения экрана, больше 64 Кб, то ImageSize равно 0, а
GraphResult = -11. Чтобы этого избежать, следует сохранять изображение по
частям.
- PutImage(X1, Y1: integer; var BitMap; BitBit: word); - выводит на экран
сохраненный в BitMap образ прямоугольной области графического изображения
экрана. Место на экране, куда восстанавливается сохраненное изображение,
задается координатами X1, Y1 - верхний левый угол прямоугольной области.
Переменная BitBit задает режим вывода на экран сохраненного изображения. Ее
значения определяются соответствующим списком констант из раздела интерфейса
модуля Graph:
const NormalPut = 0; {MOV} XORPut = 1; {XOR} ORPut = 2; {OR} ANDPut = 3; {AND} NOTPut = 4; {NOT} Каждая из этих констант соответствует записанной
в комментариях бинарной операции. 1. Если BitBit = NormalPut, то сохраненное
изображение просто выводится на экран с использованием инструкции Ассемблера MOV
(поместить). 2. Если BitBit = XORPut, то при выводе изображения используется
инструкция XOR. То есть к каждому байту видеопамяти и байту сохраненного
изображения применяется операция побитового исключающего ИЛИ (происходит
наложение изображения).
Аналогично выполняются и другие бинарные операции. В качестве примера
общей схемы процедуры сохранения графического изображения рассмотрим следующий
пример: Uses Graph; Var
Gd, Gm: integer; P: pointer; Size: word; Begin {Инициализация графического
режима} Gd := Detect; InitGraph(Gd, Gm, ''); if GraphResult <> 0 then
Halt(1); .......... {Определение необходимого объема
для сохранения графического изображения} Size := ImageSize(10, 100,
20, 110); {Выделение области динамической памяти, где
будет храниться образ прямоугольной области} GetMem(P, Size); {Сохранение изображения} GetImage(10, 100, 20, 110,
P^); ........... {Восстановление
изображения} PutImage(10, 10, P^, 0); ........... FreeMem(P,
Size); CloseGraph; End.
В этом примере изображение прямоугольной области экрана с
координатами (10, 100, 20, 110) сохраняется в динамической области оперативной
памяти, затем восстанавливается в другом месте экрана с координатами левого
верхнего угла (10, 10).
Пример: Программа, демонстрирующая движение
фигуры по экрану. [program GetPutImage]
[НАЗАД]
[ДАЛЕЕ]
|
|