Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с графикой в Паскале.doc
Скачиваний:
9
Добавлен:
25.11.2019
Размер:
291.84 Кб
Скачать
  1. Работа с текстом в графическом режиме

Для вывода текста используются растровый шрифт, символы которого определяются матрицей размером 8х8, и несколько векторных шрифтов (символы описываются набором векторов). Преимущество векторных шрифтов заключается в том, что при изменении размера символов их изображения не искажаются. Рекомендуется для вывода мелких надписей использовать растровый шрифт, для крупных символов ‑ векторный шрифт.

Каждый векторный шрифт хранится в виде отдельного файла, имеющего расширение .chr. Файлы со шрифтами должны находиться в одном каталоге с использующей их программой. В стандартном наборе шрифтов Турбо Паскаля нет русских символов.

Масштабирование и выбор шрифта производится с помощью процедуры SetTextStyle, информацию об установке режима графического текста можно получить с помощью процедуры GetTextSettings. Используемые в этих процедурах константы приведены в таблице.

Константа

Значение

Описание

DefaultFont

TriplexFont

SmallFont

SansSerifFont

GothicFont

0

1

2

3

4

растровый 8x8 шрифт

векторный шрифт

векторный шрифт

векторный шрифт

векторный шрифт

HorizDir

VertDir

0

1

Ориентация слева направо

Ориентация сверху вниз

UserCharSize

0

Размер символа определяется пользователем

  1. Создание анимации

    1. С помощью процедур GetImage и PutImage (работа с буфером). При этом используются константы вывода двоичного образа на экран.

Пример:, программа Image_ex.pas

    1. Работа со страницами видеопамяти

    2. Работа со специальными режимами записи, задаваемыми процедурой SetWriteMode (только при вычерчивании линий).

Пример: программа Rotate.pas

Построение графиков произвольных функций

Перевод мировых координат в экранные

Основные правила

  • Целые значения

  • Начало координат

  • Масштабирование

Можно для масштабирования сделать вычисления для конкретной программы. Общий подход – расчет масштабных коэффициентов в программе.

Пример

  1. Примеры программ

Пример1. Графика в текстовом режиме.

uses Crt, dos;

var i:integer;

reg:registers;

begin

clrscr;

TextMode(3);

HighVideo;

TextBackground(Black);

textcolor(white);

Writeln('Bright');

LowVideo;

Writeln('Dark');

{delete cursor}

with reg do begin

ah:=$01;

Ch:=Hi($2000);

CL:=Lo($2000);

intr($10, reg);

end;

readln;

{ Green characters on black}

window(1,1,15,12);

textbackground(magenta);

clrscr;

TextColor(Green);

WriteLn(' Hey there!');

writeln(' ╔═════════╗');

for i:=1 to 8 do

writeln(' ║ ║');

writeln(' ╚═════════╝');

textcolor(green+blink);

textbackground(yellow);

gotoxy(6,3);

writeln('hello');

textcolor(green);

textbackground(blue);

gotoxy(7,6);

writeln('/│\');

gotoxy(6,7);

writeln('//│\\');

gotoxy(5,8);

writeln('///█\\\');

gotoxy(8,9);

writeln('█');

for i:=1 to 10 do begin

gotoxy(8,5);

textcolor(yellow);

writeln('*');

{Sound(500);} { Beep }

Delay(2400); { For 400 ms }

{NoSound;}

textcolor(red);

gotoxy(8,5);

writeln('*');

delay(1300);

end;

window(1,1,80,25);

{norm cursor}

with reg do begin

ah:=$01;

Ch:=Hi($0607);

CL:=Lo($0607);

intr($10, reg);

end;

NormVideo; { Original attribute }

textbackground(green);

textcolor(white);

gotoxy(1,20);

WriteLn('Back ...');

readln

end.

Пример2. Цветные фигуры и линии

uses Graph;

var

grDriver : Integer;

grMode : Integer;

ErrCode : Integer;

begin

grDriver := Detect;

InitGraph(grDriver, grMode, 'bgi');

ErrCode := GraphResult;

if ErrCode = grOk then

begin { Do graphics }

SetColor(White);

SetLineStyle (SolidLn,0,NormWidth);

SetFillStyle (SolidFill,Red);

PieSlice(100,200,45,135,80);

SetColor (Red);

SetLineStyle(SolidLn,0,ThickWidth);

SetFillStyle (SolidFill,Yellow);

Rectangle(300,10,400,70);

FloodFill(350,50,Red);

SetColor(Green);

SetLineStyle (DashedLn,0,ThickWidth);

Line(0,GetMaxY,GetMaxX,0);

SetColor(Cyan);

SetLineStyle (SolidLn,0,NormWidth);

SetFillStyle(XHatchFill,Red);

Circle(500,250,50);

FloodFill(500,250,cyan);

Readln;

CloseGraph;

end

else

Writeln('Graphics error:', GraphErrorMsg(ErrCode));

end.

Пример 3. Движущийся круг

uses crt,

Graph;

var

Gd, Gm: Integer;

P: Pointer;

Size: Word;

i:integer;

begin

Gd := Detect;

InitGraph(Gd, Gm, ' ');

if GraphResult <> grOk then

Halt(1);

setcolor(magenta);

for i:=1 to 10 do

circle(20,30,i);

Size := ImageSize(10, 20, 30, 40);

GetMem(P, Size); { Allocate memory on heap }

GetImage(10, 20, 30, 40, P^);

readln;

ClearDevice;

for i:=1 to 120 do

begin

PutImage(10+i, 30, P^, NormalPut);

delay(100);

end;

Readln;

CloseGraph;

end.