Модуль Graph в программе Turbo Pascal
Файлы BGI и содержимое модуля Graph, инициализация и закрытие графических режимов, их классификация, анализ и управление. Рисование графических примитивов и фигур, управление цветами и шаблонами, вывод текста, выбор шрифта и стиля, сжатия изображения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 31.05.2010 |
Размер файла | 65,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
SetVisualPage (Page: Word)
которая устанавливает «видимой» на экране видеостраницу номер Page, и процедура
SetActivePage (Page: Word)
устанавливающая перенаправление всех графических операций на страницу номер Page (т.е. делающая активной). Активность не тождественна видимости страницы на экране.
Рассмотрим пример использования этих процедур.
(* Пример только для адаптеров EGA и VGA!!! *)
USES Graph, CRT; |
{используется Graph и CRT} |
|
{$I initgraf.pas} |
{процедура инициализации} |
|
PROCEDURE Forms (kadr: Byte); |
{рисование кадров 0..3} |
|
CONST |
||
Radius: Array [0..3] of Integer = (20, 40, 60, 60); |
||
VAR |
||
r, rr : Integer; |
{ радиусы эллипсов в кадрах } |
|
BEGIN |
||
r:= Radius[kadr]; |
{максимальный радиус} |
|
rr := 0; |
{ радиус вложенного эллипса } |
|
repeat |
||
Ellipse(GetMaxX div 2,GetMaxY div 2,0,360,r,rr); |
||
Inc( rr, 5 ) ; |
||
until rr>=r; |
||
END; |
||
PROCEDURE AnimEGAVGA; |
{процедура смены кадров} |
|
CONST ms = 60; |
{задержка между кадрами, мс} |
|
VAR i: Byte; |
{параметр циклов смены} |
|
BEGIN |
||
repeat |
{ цикл до нажатия клавиши...} |
|
for i:=0 to 3 do begin |
{ Смена видеостраниц: прямо } |
|
SetVisualPage (i); |
||
Delay( ms ); |
||
end; |
||
for i:=3 downto 0 do begin |
{ ... и обратно } |
|
SetVisualPage( i ); |
||
Delay( ms ); |
||
end; |
||
until KeyPressed; |
{ условие окончания показа } |
|
END; |
||
VAR |
(* ОСНОВНАЯ ЧАСТЬ ПРИМЕРА *) |
|
i: Byte; |
{ параметр (номер кадра)} |
|
BEGIN |
||
Grlnit; |
{инициализация графики } |
|
SetGraphMode (EGALo); |
{режим EGA, 640x200, 4 стр.} |
|
for i:=3 downto 0 do begin |
{ Цикл заполнения страниц} |
|
SetVisualPage (Succ (i) mod 4); |
{Видим "пустоту “} |
|
SetActivePage(i); |
{и готовим кадр} |
|
Forms( i ) |
{рисунок кадра} |
|
end; {for} |
||
AnimEGAVGA; |
{начало оживления кадров} |
|
CloseGraph |
||
END. |
Здесь показано использование процедур SetActivePage и SetVisualPage для алгоритма «кадровой» мультипликации. Особенность ее заключается в том, что все кадры (здесь их четыре) сначала записываются на соответствующие страницы, а затем производится последовательное переключение отображения страниц на дисплей процедурой SetVisualPage.
Графические окна
В системе BGI-графики вводится термин «viewport». Специальный словарь дает следующее разъяснение: «вьюпорт - это область просмотра, окно экрана, в компьютерной графике - часть пространства отображения, в которой изображается и просматривается часть моделируемого объекта». Мы будем использовать термин «графическое окно». При образовании графического окна получается как бы «экран в экране» заданного размера. В модуле Graph для описания графического окна объявлен следующий тип и две константы:
TYPE ViewPortType = RECORD
X1, Y1, X2, Y2: Integer ; |
{ границы окна} |
|
Clip: Boolean; |
{режим отсечения) |
END;
CONST
ClipOn = True; |
{ отсечение по границе окна включено} |
|
ClipOff = False; |
{ отсечение по границе окна выключено} |
Здесь первые элементы записи -- это координаты прямоугольной области (графического окна), как их принято задавать, a Clip -- это параметр, указывающий графической системе, что делать с изображением, попавшим за пределы этой области. Clip может принимать два значения. Значение ClipOn указывает на то, что все элементы изображения обрезаются по границам графического окна, a ClipOff указывает на то, что все рисуется без изменений.
Объявление графического окна производится процедурой
SetViewPort (Х1, Y1, Х2, Y2: Integer; ClipMode: Boolean)
входные параметры соответствуют полям записи типа ViewPortType. После выполнения этой процедуры все текущие установки станут относиться к окну. Текущий указатель (графический курсор) установится в его левый верхний угол, и туда же переносится начало системы координат дисплея. Другими словами, мы получим локальну систему координат устройства. Если параметры процедудуры заданы неправильно, то функция GraphResult возвратит ошибку grError (-11).
Назначение графического окна можно использовать для перемещения начала системы координат. Так, если задать окно вызовом
SetViewPort (GetMaxX div 2, GetMaxY div 2, GetMaxX, GetMaxY, ClipOff);
то получим систему координат с началом в центре экрана. При этом станет «видимой» адресация отрицательных координат. Графическое окно не меняет масштаба системы координат, а лишь выбирает систему отсчета адресуемых пикселов. Для опроса текущих параметров графического окна служит процедура
GetViewSettings {VAR ViewSettings: ViewPortType)
Если воспользоваться ею сразу же после инициализации графического режима, то обнаружится, что графическим окном является весь экран. Это говорит о том, что для системы безразлично, какое графическое устройство отображает результат, поскольку графическое окно представляет собой некоторый универсальный интерфейс между графической программной системой и графическим устройством вывода.
Для очистки рабочего пространства графического окна в модуле Graph существует специальная процедура
ClearViewPort
Она работает следующим образом:
1. устанавливает цвет заполнения равный текущему цвету фона;
2. вызывает процедуру Ваг с теми же значениями координат; что и у процедуры SetViewPort, вызванной перед этим;
3. перемещает текущий указатель в точку (0,0) .
{ Иллюстрация дейсвия режима "отсечка" }
Program ClipOn_Off;
Uses Graph;
Var d,e,r:integer;
Const
x11=0; y11=40; x12=120; y12=85;
x21=200; y21=y11; x22=320; y22=y12;
Begin
d:=Detect; InitGraph(d,r,'');
e:=GraphResult;
if e<>grOk then
writeln(GraphErrorMsg(e))
else
begin
writeln(' ClipOn: ClipOff');
Rectangle(x11,y11,x12,y12);
Rectangle(x21,y21,x22,y22);
SetViewPort(x11,y11,x12,y12,ClipOn);
Circle(20,20,60);
SetViewPort(x21,y21,x22,y22,ClipOff);
Circle(20,20,60);
readln;
CloseGraph;
end
End.
Вывод текста
Вывод текста в графическом режиме имеет ряд отличий от подобных действий в текстовом режиме. Основное отличие состоит в том, что все действия производятся только со строковыми константами и переменными. Вся числовая информация должна предварительно преобразовываться в строковую процедурой Str . Другое отличие - в том, что можно использовать различные шрифты.
Выбор шрифта и стиля
В комплектах поставки пакета Турбо Паскаль есть файлы с расширением .CHR. Это набор штриховых шрифтов, которые могут быть использованы для вывода информации. Поскольку они построены не матричным способом (как сделаны стандартные шрифты для текстового режима), а векторным, становятся возможными манипуляции размерами шрифтов без потери качества их изображения.
Всего с пакетом Турбо Паскаль поставляется четыре шрифта (хотя можно, используя отдельный специальный пакет, самостоятельно расширить их набор). Кроме того, доступен системный матричный шрифт 8x8 для графических режимов (всегда доступны символы с ASCII-кодами от 0 до 127 и символы с кодами от 128 до 255 при условии, что их матрицы загружены в память ПЭВМ). Для обозначения этих пяти шрифтов введены константы:
CONST
DefaultFont |
= 0; |
{ матричный шрифт 8x8 (по умолчанию)} |
|
TriplexFont |
= 1; |
{ полужирный шрифт} |
|
SmallFont |
= 2; |
{ светлый шрифт (тонкое начертание)} |
|
SansSerifFont |
= 3; |
{ книжная гарнитура (рубленый шрифт)} |
|
GothicFont |
= 4; |
{ готический шрифт} |
DefaultFont - это матричный шрифт 8x8. Если не принимать никаких действий по смене шрифта, то будет принят именно он.
Активизация любого из названных шрифтов осуществляется процедурой
SetTextStyle (Font, Direction: Word; CharSize: Word)
Здесь параметр Font - номер шрифта (например, одна из описанных выше констант), Direction - расположение текста (по умолчанию принимается горизонтальное). Возможны лишь две ориентации текста, обозначенные константами:
CONST
HorizDir |
= 0; |
{ горизонтальная, слева направо} |
|
VertDir |
=1; |
{ вертикальная, снизу вверх} |
При значении Direction, равном VertDir, все символы будут повернуты против часовой стрелки на 90° и выводятся снизу вверх. Если задать Direction=2, то буквы будут повернуты так же, как и при Direction=VertDir, но вывод строки будет производиться горизонтально, слева направо.
Размер каждого символа устанавливается параметром CharSize, диапазон изменения которого составляет от 1 до 10. Стандартное значение CharSize для матричного шрифта 8x8 равно единице, а для штриховых шрифтов - четырем.
При каждом вызове процедурой SetTextStyle какого-либо шрифта он читается с диска и загружается в память.
Чтобы определить результат чтения файла шрифта с диска и загрузки его в память, можно проверить значение функции CraphResult. Перечень значений, возвращаемых ею в этом случае, приведен в таблице.
GraphResult |
Смысл значения |
|
0 |
Успешное выполнение операции |
|
-8 |
Файл CHR не найден |
|
-9 |
Не хватает памяти для загрузки выбранногошрифта |
|
-11 |
Ошибка графики |
|
-12 |
Ошибка ввода-вывода графики |
|
-13 |
Неправильное содержимое файла шрифта |
|
-14 |
Неправильный номер шрифта |
{Демонстрация шрифтов}
Program SetStDem;
Uses Graph;
const
text : array[1..4] of string[14]=
('TripLexFont','SmallFont','SansSerifFont','GothicFont');
s4=', size 4';
s5=' and 5';
Var
d,r,e,i:integer;
Begin
d:=Detect;
InitGraph(d,r,'');
e:=GraphResult;
if e<>grOk then
writeln(GraphErrorMsg(e))
else
begin
SetTextStyle(DefaultFont,HorizDir,1);
OutText('DefaultFont, size 1');
SetTextStyle(0,0,2);
OutText(' and 2');
for i:=1 to 4 do begin
SetTextStyle(i,0,4);
Moveto(10,i*40);
OutText(text[i]+s4);
SetTextStyle(i,0,5);
Outtext(s5);
end;
for i:=1 to 4 do begin
SetTextStyle(i,1,4);
Moveto(GetMaxX div 2+i*40-20,0);
OutText(text[i]);
end;
readln;
CloseGraph;
end
End.
Непосредственный вывод строк
Для вывода текста есть две процедуры. Первая --OutText (TextString: String) выводит на графический экран строку TextString, ориентированную относительно позиции текущего указателя, а вторая OutTextXY (X, Y: Integer; TextString: String} выводит строку, ориентированную относительно координат (X,Y). Шрифт предварительно может быть установлен вызовом SetTextStyle (по умолчанию принимается DefaultFont). Рассмотрим ориентировку строки относительно стартовой точки. Существует несколько вариантов ориентировки. Они задаются процедурой SetTextJustify (Horizontal, Vertical: Word), параметры которой могут принимать одно из трех объявленных в модуле Graph значений:
CONST
{ -- Для горизонтального ориентирования (Horizontal) --} |
|||
LeftText |
=0; |
{координата X задает левый край строки} |
|
Center-Text |
= 1; |
{координата X задает середину строки} |
|
RightText |
= 2; |
{координата X задает правый край строки} |
|
{ -- Для вертикального ориентирования (Vertical): --} |
|||
BottomText |
= 0; |
{координата Y задает нижний край строки} |
|
CenterText |
= 1; |
{координата Y задает середину строки} |
|
TopText |
= 2; |
{координата Y задает верхний край} |
Эта процедура позволяет ориентировать выводимую строку относительно стартовой координаты по установленной схеме. По умолчанию параметры ориентировки соответствуют LeftText, TopText.
Подобные документы
Понятие и история развития языка Turbo Pascal, оценка его графических возможностей и особенностей. Инициализация графического режима. Управление экраном и окнами, цветом и фоном, принципы работы с текстом. Построение графиков функций и изображений.
курсовая работа [159,9 K], добавлен 17.12.2014Исследование интерфейса и основных возможностей Adobe Photoshop - стандарта для работы с растровой графикой. Описания инструментов выделения, перемещения, кадрирования, нарезки. Рисование графических примитивов. Заливки и работа с цветами в программе.
презентация [340,4 K], добавлен 04.11.2014Использование графических возможностей Турбо Паскаля, подключение графического модуля Graph. Графические функции и процедуры. Общая структура графической программы. Построение фигур, определение цветов и стилей, работа с текстом, сообщения об ошибках.
реферат [109,3 K], добавлен 28.04.2010Проектирование программ в среде Рascal с интерфейсом типа "Меню". Разработка и отладка программы сортировки массива данных. Освоение методов проектирования Pascal-программ с использованием графических процедур и функций из стандартного модуля Graph.
контрольная работа [581,1 K], добавлен 16.01.2015Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.
лабораторная работа [12,7 K], добавлен 14.05.2011Виды графических редакторов. Форматы файлов для хранения растровых графических изображений. Среда графического редактора. Панели инструментов и режимы работы графических редакторов. Инструменты редактирования рисунка. Изменение шрифта текста на рисунке.
контрольная работа [246,6 K], добавлен 16.12.2010Алгоритмічна мова програмування універсального призначення Turbo Pascal. Розробка і створення програми для гри "Шибениця". Алгоритм функціонування программи, блок-схема алгоритму. Використання додаткових модулів Graph та Crt у процессі створення програми.
курсовая работа [2,0 M], добавлен 23.06.2010Растровые, векторные и комплексные графические форматы. Классификация графических форматов по допустимому объему данных, параметрам изображения, хранению палитры и методике сжатия. Разновидности метода Фурье. Метод преобразования Karhunen-Loeve.
курсовая работа [46,0 K], добавлен 22.12.2014Разработка программы, реализующей игру "Змейка" в среде Turbo Pascal. Возможность создания игры в модуле библиотеки crt, что позволяет использовать программу на компьютерах без графических библиотек и компьютерах, имеющих малый объём оперативной памяти.
курсовая работа [190,5 K], добавлен 02.02.2013Характеристика мови Turbo Pascal. Опис деяких графічних процедур і функцій модуля Graph. Робота в графічному режимі. Процедури, опції модуля CRT. Створення програми розв'язку системи нерівностей з двома змінними в графічному режимі Турбо Паскаля.
курсовая работа [35,0 K], добавлен 24.02.2011