русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Мультипликация с запоминанием части экрана


Дата добавления: 2014-11-28; просмотров: 690; Нарушение авторских прав


 

 

Прежде чем сохранить фрагмент экрана, под него нужно отвести память, размер (Size) которой определяют с помощью функции:

 
 


Size: = ImageSize(X1, Y1, X2, Y2);{тип Word}

 

Параметры функции ImageSize определяют границу прямоугольной области графического экрана подобно процедуре Rectangle. Функция определяет число байт для хранения этой области. Этот размер можно также вычислить по формуле :

(X2-X1+1)*(Y2-Y1+1). Размер отводимой памяти должен быть меньше 64 Кбайт.

 

Далее определяем параметр P (типа pointer), который будет содержать начальный адрес области памяти ( буфера) размером "Size", отводимый для хранения двоичного образапрямоугольной области экрана процедурой:

GetMem(P, Size);

 

Сохраняем двоичный образ прямоугольной области в ОЗУ (буфере) процедурой:

GetImage(X1, Y1, X2, Y2, P^);

 

Сохраненный массив пикселов можно выводить на экран из буфера процедурой:

PutImage(X, Y, P^, N);

 

Здесь X, Y - позиция вывода верхнего левого угла прямоугольной области,

P^ - обозначает содержимое буфера с начальным адресом "Р",

N - режим вывода:

N = 0(CopyPut) - замена изображения на экране изображением из буфера.

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

N = 1( XorPut) - "исключающее ИЛИ" (результат равен 1, если значения битов различны),

N = 2( OrPut) - "ИЛИ" (результат равен 1, если один из битов равен 1),

N = 3( AndPut) - " И " (результат равен 1, если оба бита равны 1),

N = 4( NotPut) - " НЕ" (замена изображения на экране инверсным изображением из буфера).

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



 
 


Режим вывода Значения битов, соответствующие цвету пиксела

красный цвет синий цветрезультирующий цвет

 
 


XorPut00000100 00000001 00000101 = $5 фиолетовый

OrPut00000100 00000001 00000101 = $5 фиолетовый

AndPut00000100 00000001 00000000 = $0 черный

NotPut00000100 $15-$4 = $11 ярко-голубой

 

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

 

 

Освобождение(очистка) участков памяти размером "Size", начиная с адреса, заданного параметром "Р", производится процедурой:

 
 


FreeMem(P, Size);

 

Значения P и P^ после этого не определены.

 

Приведем пример программы - мультипликации с использованием процедур GetImage, PutImage, в режиме вывода XorPut:

uses Graph, Crt;

var Gd, Gm, i, j, k, Size, x, y, Xmax, Ymax: Integer;

P1, P2: Pointer;{ тип указатель }

Begin

Gd := VGA; Gm:=2; InitGraph(Gd, Gm, 'c:\tp7\bgi');

Size := ImageSize(0, 0, 20, 100);{ размер области }

SetLineStyle(0, 0, 3);{ рисуем толстыми линиями }

PieSlice(10, 10, 0, 360, 10);{ заполненный круг }

FillEllipse(10, 40, 10, 20);{ заполненный эллипс }

Line(8, 60, 0, 100); Line(12, 60, 20, 100); { линии }

       
 
   
 


{ первый образ }

 
 


PieSlice(60, 10, 0, 360, 10);

FillEllipse(60, 40, 10, 20);

Line(60, 60, 60, 100);

 

{ второй образ }

GetMem(P1, Size);{ P1 - указатель адреса для хранения первого образа }

GetImage(0, 0, 20, 100, P1^);{P1^ - содержимое (двоичный код) образа }

 

GetMem(P2, Size);{ P2 - указатель адреса для хранения второго образа }

GetImage(50, 0, 70, 100, P2^);{P2^ - содержимое (двоичный код) образа }

 

x:=0; y:=200;{ координаты начальной точки }

Readln; ClearDevice; Line( 0, 300, 600, 300); { "дорога" }

 

Repeat{ имитация движения чередованием образов со смещением }

PutImage(x, y, P1^, 1); delay(50); PutImage(x, y, P1^, 1);

x:=x+10;{ смещаем позицию на полшага }

PutImage(x, y, P2^, 1); delay(50); PutImage(x, y, P2^, 1);

x:=x+10

Until x > GetmaxX - 20;{ достижение края }

 



<== предыдущая лекция | следующая лекция ==>
Практическое задание N 1. 62 | Мультипликация с чередованием видеостраниц


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.078 сек.