пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

pogromirovanie:
» sooqa
Уася:
» History motherfuckers

26-31 Графический пакет Graph.tpu. Графический режим, его инициализация, закрытие, обработка ошибок инициализации. Построение графических примитивов. (Пример программ).

Модуль обеспечивает работу с экраном в графическом режиме. 
Экран в графическом режиме представляется в виде совокупности точек - пикселов. Цвет каждого пиксела можно задавать отдельно. Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0). Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы - графического драйвера. 
В состав оболочки входит несколько драйверов, каждый из может работать в нескольких режимах. Режим устанавливается при инициализации графики либо автоматически, либо программистом. 
Модуль Graph обеспечивает: 

  1. вывод линий и геометрических фигур заданным цветом и стилем;
  2. закрашивание областей заданным цветом и шаблоном;
  3. вывод текста различным шрифтом, заданного размера и направления;
  4. определение окон и отсечение по их границе;
  5. использование графических спрайтов и работу с графическими страницами.


В отличие от текстового режима, в графическом курсор невидим. 
Перед выводом изображения необходимо определить его стиль, то есть задать цвет фона, цвет линий и контуров, тип линий, шаблон заполнения, вид и размер шрифта, и так далее. 
Эти параметры устанавливаются с помощью соответствующих процедур. Возможные значения параметров определены в модуле Graph в виде многочисленных констант. 
Структура графической программы

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

  1. подключение модуля Graph;
  2. перевод экрана в графический режим;
  3. установку параметров изображения;
  4. вывод изображения;
  5. возврат в текстовый режим.

Графический режим работы

Графические драйверы располагаются в подкаталоге BGI EGAVGA.BGI

 

Инициализация графического режима

Выполняется процедурой модуля Graph

InitGraph (GDriver, CMode, Dpath);

 Параметры процедуры:

GDriver - 1) если задается явно GDriver:=VGA;

                  2) если автоопределение. GDriver:=DETECT;
             CMode - если GDriver задан явно, то и режим явно: 0,1,2; если автоопредел., то можно не указывать, тогда выбирается реж. наибольшего разрешения.

Dpath - путь к графическим файлам.

Если процедура InitGraph не сработала, то GDriver будет содержать код ошибки.

Error:= GraphResult;

 

GraphErrorMSG(Error);- выдает сообщение об ошибке на англ. яз.
 

Пример работы в графическом режиме:

Uses Graph;

Procedure GRinit;

var     GDriver, CMode, Error:integer;
begin

GDriver:=detect;

InitGraph (GDriver, CMode, ' ');

Error:=GraphResult;

if Error<>GRok then begin

writeln('ошибка', GraphErrorMSG(Error));

halt
end;
end;
Begin
GRinit;
<рисование>
Readln; {задержка изобр. на экране }

CloseGraph;{ выгружается графический режим}

End.
Рисование графических примитивов

SetColor(<цвет>);где <цвет>- N цвета( 1-15) или название (red); -цвет

пера;

SetBkcolor(<цвет>); -цвет фона;

PutPixel(x,y, <цвет>); -выделение пиксела указанным цветом;
Рисование линий

Line(x1,y1,x2,y2); LineTo(x,y); LineRel(dx,dy);

Задание толщины и стиля линий

SetLineStyle(<тип>,<шаблон>,<толщина>);
<тип>: Solidln=0{__},

Dotteln=1{….},

Centerln=2{- -},

Dashdln=3{- -},

UserBitln=4{пользовательский тип}

<шаблон>: 0 - если <тип> =0 - 3;

        если<тип>=4, то формируем из 16 пиксел (1-светится, 0-погашен:

        1100110011001100); число записывается в 10-ой или 16-ой

         системах счисления ;

<толщина>: Normwidth=1, Thickwidth=3.

Функции опроса местоположения курсора

GetX, GetY-определение текущих координат;

MoveTo(x,y), MoveRel(dx,dy)- перемещение ;

GetMaxX, GetMaxY-разрешающая способность по горизонтали и вертикали/
Построение фигур с большим количеством вершин (многоугольников и графиков ф-ий)

DrawPoly(Np,Point); где Np- кол. вешин, если фигура замкнутая, то Np=N+1;

Var Point: array[1..N] of PointType; массив координат вершин или точек графика

PointType= record x,y: integer end;


Работа с фрагментами изображений

  1. Нарисовать изображение в любом месте экрана.
  2. Узнать размер min прямоугольника, содержащего изображение.
    size:=ImageSize(x1,y1,x2,y2); (x1,y1 (x2,y2)
  3. Создание буфера в оперативной памяти GetMem(P, size); где Р- ссылочная переменная (адрес начала буфера), Р: pointer;
  4. Считываем изображение в буфер GetImage(x1,y1,x2,y2,P^)
  5. Помещаем изображение из буфера в любое место экрана
    PutImage(x,y,P^, <режим>); (x,y) <режим>:СopyPut,
    XorPut, AndPut,
    NotPut, OrPut PutImage (x,y,P^,xorput); - рисование
    Delay(20);
    PutImage (x,y,P^,xorput); - стиране
  6. Удаление буфера FreeMem(P, Size);

Нарисовать объект , движущийся из левого верхнего угла экрана в правый нижний.
Uses CRT, GRAPH;
Var x,y,r: integer; p: pointer;
size: word; dx, dy: integer;
<описание процедуры инициализации граф. режима GRINIT>
Begin
GRINIT;
R:=10;
SetFillStyle(solidfill, green);
Pieslice (10,10,0,360,r);
Size:= ImageSize(1,1,20,20);
GetMem(p,Size);
GetImage(1,1,20,20,p^);
SetFillStyle(1, white);
Bar(0,0,getmaxx, getmaxy);
X:=0; Y:=0; dx:=3; dy:=2;
Repeat
PutImage (x,y,P^,xorput);
Delay(20);
PutImage (x,y,P^,xorput);
Inc(x,dx);
Inc(y,dy);
until (x>=Getmaxx) or (y>= Getmaxy);
FreeMem(p, s); Readln;
CloseGraph;
End.


27.01.2014; 07:13
хиты: 329
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь