Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль / sidorov / Сидоров.DOC
Скачиваний:
30
Добавлен:
10.12.2013
Размер:
1.68 Mб
Скачать

Var Gd, Gm, k, X, y, Size: integer; s: string;

begin

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

X:= 0; Y:= 0; { начальные координаты вывода текста }

for Size:= 1 to 10 do begin k:= 0; { перебор размеров шрифта }

SetTextStyle(k,0,Size); Str(Size,S);{ пишем матричным шрифтом }

OutTextXY(X, Y, 'Size=' + S);

Y:= Y + TextHeight('S') + 1 { смещение по "Y" на высоту буквы "S" }

end;

Readln; ClearDevice;

SetTextJustify(1,2); { выравнивание по центру }

for k:= 1 to 4 do begin { пишем векторными шрифтами }

Y:= 0; SetColor(k+8);

for Size:=1 to 10 do begin { перебор размеров шрифта }

SetTextStyle(k, 0, Size); Str(Size, S);

OutTextXY( GetmaxX div 2, Y, 'Size='+S);

Y:= Y + TextHeight('S') + 1;

end;

Readln; ClearDevice

end; CloseGraph

end.

103

Практическое задание N 1. 62

1. Сопоставить матричный шрифт с векторными шрифтами выводом строки "MATRIX" (матричным шрифтом) и строки с названием векторного шрифта (например, "GOTHIC" - при F=4) всеми доступными размерами. Номер размера также должен выводиться.

2. Вывести разными шрифтами и размерами свое имя с указанием значений параметров "F" и "Z".

Примечание: доступный размер определяется в программе из условия размещения строки с текстом на экране.

3/4. Выполнить п. 1/2 размещая надпись с базовым размером шрифта в рамке. Изменять позиции вывода (выравнивания) строки текста. Изменять пропорции шрифта.

5. Вывести в графическом режиме таблицу функций X, SIN(X), COS(X) для X=0, . . . , PI с шагом PI/10. Таблица должна иметь заголовок и располагаться в рамке. При этом нужно рассчитать размеры шрифта по результатам, возвращаемым функциями TextWidth и TextHeight так, чтобы таблица заняла максимальную область экрана.

6. Выполнить п. 5 для Х= -Pi до Pi с шагом Pi/5.

7. Создать аналог электронного секундомера, выводящего цифры (от 0 до 59) матричным шрифтом большого размера в центре прямоугольника. После задержки текущая цифра перерисовывается цветом фона и подается звуковой сигнал. Секундомер запускается нажатием клавиши Enter.

8. Выполнить п. 7 для векторного шрифта с использованием режима XorPut.

1. 15. 5. Мультипликация

Принцип мультипликации состоит в быстром воспроизведении на экране заранее подготовленных рисунков (картинок). Поскольку зрительные нервы не фиксируют информацию продолжительностью < 1/6 сек., то, быстрая смена кадра (изображения на экране) не замечается человеком.

Мультипликация в графическом режиме обеспечивается возможностью запоминать (хранить в ОЗУ) прямоугольные массивы пикселов. Эти массивы можно в дальнейшем выводить в любом месте экрана в нужное время.

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

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

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

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

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

104

Далее определяем параметр 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) - " НЕ" (замена изображения на экране инверсным изображением из буфера).

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

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

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

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

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

AndPut 00000100 00000001 00000000 = $0 черный

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

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

105

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

FreeMem(P, Size);

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

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

uses Graph, Crt;