|
||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[34] Мультипликация в графическом режиме обеспечивается возможностью запоминать (хранить в ОЗУ) прямоугольные массивы пикселов. Эти массивы можно в дальнейшем выводить в любом месте экрана в нужное время. 1. 15. 5. 1. Мультипликация с запоминанием части экрана Прежде чем сохранить фрагмент экрана, которой определяют с помощью функции: под него нужно отвести память, размер (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, PA); Сохраненный массив пикселов можно выводить на экран из буфера процедурой: PutImage(X, Y, PA, N); Здесь X, Y - позиция вывода верхнего левого угла прямоугольной области, PA - обозначает содержимое буфера с начальным адресом "Р", N - режим вывода: N = 0 (CopyPut) - замена изображения на экране изображением из буфера. Остальные режимы соответствуют логическим операциям с битами, определяющими цвет пикселов на экране и соответствующих значений цвета пикселов, выводящихся из буфера: N = 1 ( XorPut) - "исключающее ИЛИ" (результат равен 1, если значения битов различны), N = 2 ( OrPut) - "ИЛИ" (результат равен 1, если один из битов равен 1), N = 3 ( AndPut) - " И " (результат равен 1, если оба бита равны 1), N = 4 ( NotPut) - " НЕ" (замена изображения на экране инверсным изображением из буфера). Цвет пикселов изображения из буфера не изменяется, если рисунок выводится в область, залитую фоном. Цвет пикселов изображения из буфера изменяется в соответствии с логическими операциям над битами, определяющими цвет пикселов, если рисунок выводится в область заполненных каким либо цветом фигур. Например, при выводе красного круга на синий прямоугольник результирующий цвет пикселов будет:
Вывод в режиме XorPut удобно использовать при создании движущихся изображений, поскольку при первом выводе получаем изображение из буфера, а при втором - восстанавливаем изображение на экране. Для создания движущегося изображения в буфер помещают, как правило несколько различных образов, например, рисунок человечка с различным положением рук и ног. На экран выводится первое изображение в режиме XorPut, затем следует задержка выполнения программы, снова выводится первое изображение в режиме XorPut в том же месте (происходит восстановление изображения на экране), далее (возможно в другой позиции) выводится второе изображение в режиме XorPut и т. д. Освобождение (очистка) участков памяти размером "Size", начиная с адреса, заданного параметром " Р", производится процедурой: FreeMem(P, Size); Значения P и PA после этого не определены. Приведем пример программы - мультипликации с использованием процедур Getlmage, Putlmage, в режиме вывода XorPut: uses Graph, Crt; var Gd, Gm, i, j, k, Size, x, y,Xmax, Ymax: Integer; P1, P2: Pointer;{ тип указатель } 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);{ заполненный круг } f\FillEllipse(10, 40,10, 20);{ заполненный эллипс } l\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, P1A);(P1A - содержимое (двоичный код) образа } GetMem(P2, Size);{ P2 - указатель адреса для хранения второго образа } GetImage(50, 0, 70, 100, Р2Л); {P2A - содержимое (двоичный код) образа } x:=0; y:=200;{ координаты начальной точки } Readln; ClearDevice; Line( 0, 300, 600, 300);{ "дорога" } Repeat{ имитация движения чередованием образов со смещением } PutImage(x, y, Р1Л, 1); delay(50); PutImage(x, y, Р1Л, 1); x:=x+10;{ смещаем позицию на полшага } PutImage(x, y, P2Л, 1); delay(50); PutImage(x, y, P2Л, 1); x:=x+10 Until x > GetmaxX - 20;{ достижение края } FreeMem(P1, Size); FreeMem(P2, Size); CloseGraph В приведенной программе в память заносятся два образа человечка с разным положением ног. Экран очищается и в цикле происходит поочередное извлечение образов со смещением по оси "х". Каждое изображение хранится на экране 0, 05 с. , затем исчезает, вследствие перерисовки в режиме XorPut. Практическое задание N 1. 63 1.Создать перемещающуюся слева направо фигурку чередованием двух или трех образов с озвучиванием перемещения. Варианты фигурок: -катящееся колесо со спицами, -шагающий ослик, -летящая со взмахами крыльев птица, -летящий вертолет (вид сверху), -гребец в лодке, -прыгающий мяч, деформирующийся при ударе. 2.Создать картину: перемещение машины (прямоугольника) желтого цвета на фоне гор (треугольников) синего, темно-серого, фиолетового, зеленого цветов. Определить заранее цвет машины на фоне гор, и вывести названия этих цветов над горами. 3.Создать картину: перемещение самолета (треугольника) белого цвета на фоне облаков (эллипсов) голубого, ярко- голубого, ярко- синего, ярко- серого цветов. Определить заранее цвет самолета на фоне облаков, и вывести названия этих цветов над облаками. 4.Создать "бегущую строку" ( в графическом режиме ). Для этого необходимо вывести на экран надпись и в цикле выводить в другой области экрана часть буфера от 0 до Size и от Size до 0, одновременно изменяя координату "х" начала вывода строки от GetMaxX до нуля. 1. 15. 5. 2. Мультипликация с чередованием видеостраниц Для изменения всего изображения на экране необходимо быстро заменять рисунок на экране другим, готовым рисунком. Это обеспечивается возможностью рисования " вслепую" - |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||||||||