МОДУЛЬ GRAPH
Графическая Библиотека для TMT Pascal v3.50SP2
Часть 4
Copyright (c) 1997,98 TMT Development Corp.
All Rights Reserved
Если вы заметили в документе
опечатки или неточности перевода,
просьба сообщить о них!
Перевод на русский язык и оформление:
Валерий Вотинцев
К Содержанию
Процедуры и Функции
-
AnalizeRGB (процедура)
-
Возвращает RGB составляющие указанного цвета.
Объявление:
procedure AnalizeRGB (Color: Dword; var R,G,B: Byte);
-
Пояснения:
-
Данная функция работает только с SVGA режимами HiColor и TrueColor.
Значения RGB составляющих, возвращаемые процедурой AnalizeRGB, зависят
от того, какой именно видео режим установлен (32K, 64K или 16M цветов).
-
Arc (процедура)
-
Рисует дугу окружности.
Объявление:
procedure Arc (X,Y; Integer; StAngle, EndAngle, Radius; Word);
-
Пояснения:
-
Дуга начинается от радиального угла StAngle (стартовый угол) и закачиваетс
в точке с углом EndAngle; Radius - радиус окружности;
(x,y) - точка центра окружности.
-
Bar (процедура)
-
Рисует прямоугольник, закрашенный текущим цветом заполнения.
Объявление:
procedure Bar(x1, y1, x2, y2: LongInt);
-
Пояснения:
-
С помощью данной процедуры можно рисовать закрашенные изнутри прямоугольники,
часто используемые, например, в столбиковых диаграммах. Для заполнени
используется цвет, задаваемый в SetFillColor.
Если требуется отрисовка внешнего контура прямоугольника,
то для этого следует использовать вызов Bar3D с указанием нулевой глубины.
-
Bar3D (процедура)
-
Рисует 3-D прямоугольник (параллелепипед),
закрашенный текущим цветом заполнения.
Объявление:
procedure Bar3D(x1, y1, x2, y2: DWord; Depth: Word; Top: Boolean);
-
Пояснения:
-
Процедура Bar3D рисует трехмерный прямоугольник (параллелепипед),
заполненный изнутри цветом и образцом заполнения, задаваемыми процедурой
SetFillColor. 3-D обрамление прямоугольника рисуется линией текущего стил
и цвета, которые устанавливаются процедурами SetLineStylle и SetColor.
Параметр "Depth" задает глубину в пикселях внешней 3-D обводки.
Если значение Top = TopOn, то верхняя грань рисуется, если TopOff = False,
то, соответственно, нет. Таким образом, имеется возможность изображать
множество параллелепипедов, располагая их один над другим.
-
Типичное значение глубины обычно составляет 25% от ширины прямоугольника:
Bar3D(X1, Y1, X2, Y2, (X2 - X1 + 1) div 4, TopOn);
-
Circle (процедура)
-
Рисует окружность с центром в точке (X,Y) текущим цветом, установленным
с помощью SetColor.
Объявление:
procedure Circle(X,Y: LongInt; Radius: DWord);
-
Пояснения:
-
При рисовании учитывается коэффициент пропорциональности,
зависящий от установленного графического режима.
-
ClearDevice (процедура)
-
Очищает выбранное текущим устройство вывода и устанавливает указатель
в начальное положение.
Объявление:
procedure ClearDevice;
-
Пояснения:
-
ClearDevice перемещает текущий указатель в точку (0, 0),
и очищает всю доступную видео-память нулями.
-
ClearPage (процедура)
-
Очищает текущую активную страницу цветом фона, установленным процедурой
SetBkColor, и перемещает текущий указатель в точку (0, 0).
Объявление:
procedure ClearPage;
-
Пояснения:
-
Следует учитывать, что активная логическая страница, установленна
процедурой SetLogicalPage, может быть больше размеров физического экрана.
-
ClearViewPort (процедура)
-
Очищает видимую часть изображения (view port) фоновым цветом,
установленным процедурой SetBkColor, и перемещает текущий указатель
в начальное положение (0, 0).
Объявление:
procedure ClearViewPort;
-
CliRetrace (процедура)
-
Запрещает прерывания, ожидает обратного вертикального хода луча,
затем снова разрешает прерывания.
Объявление:
procedure CliRetrace;
-
CliHRetrace (процедура)
-
Запрещает прерывания, ожидает обратного горизонтального хода луча,
затем снова разрешает прерывания.
Объявление:
procedure CliHRetrace;
-
CloseGraph (процедура)
-
Полностью закрывает графическую систему.
Объявление:
procedure CloseGraph;
-
Пояснения:
-
Процедура CloseGraph восстанавливает состояние экрана, которое было до
инициализации графической системы и освобождает память, выделенную
под графический буфер.
-
DetectSVGAMode (функция)
-
Врзвращает правильный номер VESA VBE режима для запрашиваемого видео-режима.
Если запрашиваемый видео-режим не поддерживается, то возвращается ноль.
Объявление:
function DetectSVGAMode (XRes,YRes,BPP,VMode: Word): Word;
-
Пояснения:
-
Эта функция может быть использована совместно с процедурой SetGraphMode.
В следующем примере производится попытка установить SVGA режим 640x480
с максимальным количеством цветов:
uses Crt,Graph;
function SetSVGA640x480: String;
const Bps: array [0..4] of Word=(32,24,16,15,8);
var Mode,i: Word;
begin
for i:=0 to 4 do begin
Mode:=DetectSVGAMode(640,480,bps[i],LfbOrBanked);
if Mode>0 then begin
SetGraphMode(Mode);
if GraphResult=grOk then begin
Str(bps[i],Result);
exit;
end;
end;
end;
RestoreCrtMode;
Result:='';
end;
var S: String;
begin
S:=SetSVGA640x480;
if S<>'' then begin
SetTextJustify(CenterText,CenterText);
OutTextXY(320,240,'Установлен SVGA режим 640x480 '+S+' bps');
OutTextXY(320,260,'Нажмите любую клавишу...');
ReadKey;
RestoreCrtMode;
end else
Writeln(' Режим SVGA 640x480 не поддерживается...');
end.
-
DrawEllipse (процедура)
-
Рисует эллипс с центром в точке (X,Y). Параметры "A" и "B" задают
габариты эллипса соответственно по горизонтали и по вертикали.
-
Объявление:
procedure DrawEllipse(X, Y, A, B: LongInt)
DrawHLine (процедура)
-
Рисует ГОРИЗОНТАЛЬНУЮ линию установленным цветом заполнения (fill color).
Объявление:
procedure DrawHLine (X1,X2,Y: LongInt);
DrawPoly (процедура)
-
Рисует выпуклый многоугольник текущим цветом и стилем линии.
Объявление:
procedure DrawPoly(NumVert: DWord; var Vert);
-
Пояснения:
-
Параметр Numvert задает количество вершин в многоугольнике.
Каждая вершина описывается парой координат (X,Y) типа LongInt в массиве Vert.
-
Эта процедура отличается от аналогичной процедуры из модуля Borland GRAPH.
Внутренние углы в многоугольнике НЕ ДОЛЖНЫ превышать 180 градусов,
т.е. многоугольник должен быть выпуклым.
/\
/\ \ \
\ \ / \
\ \ \/\ \
\/ \/
1. Правильный 2. Неправильный
многоугольник многоугольник
-
Если Вам требуется нарисовать неправильный многоугольник (2),
то Вы должны предварительно разделить его на 2 правильных:
/\ /\
\ \ \ \
/\ + \ \ = / \
\/ \ \ \/\ \
\/ \/
Ellipse (процедура)
-
Рисует ЧАСТЬ эллипса.
Объявление:
procedure Ellipse(X,Y: LongInt;
StAngle, EndAngle,
XRadius, YRadius: DWord);
-
Пояснения:
-
Процедура Ellipse рисует дугу эллипса начиная с угла StAngle до угла
EndAngle, с радиусами XRadius и YRadius, и точкой центра (X,Y).
ExpandFill (процедура)
-
Закрашивает ограниченную область текущим цветом.
Объявление:
procedure ExpandFill(X, Y: Integer);
-
Пояснения:
-
Процедура заливает текущим цветом, установленным с помощью SetFillColor,
закрытую область растрового изображения. Заливка начинается в точке (X, Y).
Если эта точка находится внутри зоны одного цвета, то зона будет закрашена
изнутри. Если же точка находится снаружи - то будет залито все за пределами
данной зоны.
FillEllipse (процедура)
-
Рисует закрашенный эллипс
Объявление:
procedure FillEllipse(X, Y, A, B: LongInt)
-
Пояснения:
-
(X,Y) - точка центра;
A и B - габариты по горизонтали и вертикали.
FillPoly (процедура)
-
Рисует закрашенный многоугольник.
Объявление:
procedure FillPoly(NumVert: DWord; var Vert);
-
Пояснения:
-
Vert - содержит пары координат (X,Y:LongInt) для всех вершин многоугольника.
NumVert - количество вершин в многоугольнике.
Процедура FillPoly сначала рассчитывает все точки пересечения ребер
многоугольника, и затем закрашивает его цветом, установленным процедурой
SetFillColor.
FillTriangle (процедура)
-
Рисует закрашенный треугольник.
Объявление:
procedure FillTriangle (X1,Y1,X2,Y2,X3,Y3: LongInt);
FlipImageOY (процедура)
-
Переворачивает растровое изображение (BitMap) по вертикали
(зеркальный поворот относительно оси OX).
Объявление:
procedure FlipImageOY (var BitMap);
-
Пример:
uses Graph, CRT;
var P: Pointer;
i,j,dx,dy: DWord;
begin
{ Set SVGA mode 640x480x256. You can set ANY supported mode }
SetSVGAMode(640,480,8,LfbOrBanked);
if GraphResult<>grOk then begin
ClrScr;
Writeln(GraphErrorMsg(GraphResult));
exit;
end;
dx:=(GetMaxX+1) div 2;
dy:=(GetMaxY+1) div 2;
for i:=0 to dx do
for j:=0 to dy do
PutPixel(i,j,i*j div dx);
SetTextJustify(CenterText,BottomText);
OutTextXY(dx,dy+dy div 2,'Press any key...');
ReadKey;
GetMem(P,ImageSize(0,0,dx-1,dy-1));
GetImage(0,0,dx-1,dy-1,P^);
FlipImageOX(P^);
PutImage(dx,0,P^);
FlipImageOY(P^);
PutImage(dx,dy,P^);
FlipImageOX(P^);
PutImage(0,dy,P^);
ReadKey;
FreeMem(P,ImageSize(0,0,dx-1,dy-1));
RestoreCrtMode;
end.
FlipImageOX (процедура)
-
Переворачивает растровое изображение (BitMap) по горизонтали
(зеркальный поворот относительно оси OY).
Объявление:
procedure FlipImageOX (var BitMap);
-
Пояснения:
-
См. пример для FlipImageOY.
FlipToMemory (процедура)
-
Копирует содержимое нулевой графической страницы в буфер, на который
указывает указатель Addr.
Объявление:
procedure FlipToMemory (Addr: Pointer)
-
Пояснения:
-
Эта процедура весьма удобна для копирования содержимого текущей графической
страницы в виртуальный буфер для последующей обработки.
-
FlipToMemory НЕ ПОДДЕРЖИВАЕТСЯ в бесплатной версии TMT Pascal.
FlipToScreen (процедура)
-
Копирует содержимое из буфера памяти, адресуемого указателем Addr,
в нулевую графическую страницу.
Объявление:
procedure FlipToScreen (Addr: Pointer)
-
Пояснения:
-
Эта процедура очень удобна для переноса уже обработанного изображени
из виртуальной страницы на графическую страницу.
-
FlipToScreen НЕ ПОДДЕРЖИВАЕТСЯ в бесплатной версии TMT Pascal.
FloodFill (процедура)
-
Производит заливку области до границы указанного цвета.
Объявление:
procedure FloodFill(X, Y: Integer; Border: Word);
-
Пояснения:
-
Используется для заливки области, ограниченной цветом,
задаваемым в параметре Border. Заливка производится текущим цветом заливки,
установленным процедурой SetFillColor. (X, Y) - стартовая точка заливки.
|