390 likes | 607 Views
Графические возможности. Pascal. Любое изображение на экране монитора формируется из отдельных элементов – пикселов (от англ. Pixel - Picture Element – элемент изображения).
E N D
Графические возможности Pascal
Любое изображение на экране монитора формируется из отдельных элементов – пикселов (от англ. Pixel - PictureElement – элемент изображения). • Для получения того или иного изображения на экране монитора как в графическом, так и в текстовом режимах необходимо заставить светиться строго определенную группу пикселов. • В текстовом режиме на экран могут выводиться только определенные символы, образы которых хранятся в постоянной или оперативной памяти компьютера, а управление отдельными пикселами невозможно. • В графическом режиме появляется возможность управления отдельными пикселами, что позволяет формировать любые изображения.
С технической точки зрения управлением монитора занимается специальное устройство компьютера – видеоадаптер. • видеоадаптер – это весьма сложное электронное устройство, управляемое собственным микропроцессором. • В самом общем виде видеоадаптер состоит из контроллера электронно-лучевой трубки (CRT-контроллера) и видеопамяти (видеобуфера).
Чтобы сделать процесс создания графических изображений более простым и эффективным фирма BorlandInternational разработала специальную библиотеку GRAPH, а также набор графических драйверов, позволяющих работать с различными типами видеоадаптеров. • Графический драйвер – это вспомогательная программа-посредник, обеспечивающая взаимодействие пользовательских программ с конкретным графическим устройством. • Графические драйверы хранятся в файлах с расширением .BGI (BorlandGraphicInterface). Обычно эти файлы расположены в каталоге \BP\BGI (или \TP\BGI).
Инициализация графического режима • Любая программа, использующая графику должна прежде всего подключить модуль Graph. Это выполняется директивой USES: • USESGraph; • Прежде чем работать с графикой необходимо установить определенный графический видеорежим. Выбор видеорежима зависит от имеющегося графического адаптера. • Большинство современных компьютеров (IBM-совместимых) имеют в своем составе видеоадаптер стандарта VGA (VideoGraphicArray) или SuperVGA. Для работы с таким адаптером используется графический драйвер EGAVGA.BGI.
При этом имеется возможность работы в трех различных видеорежимах: Во всех трех видеорежимах возможно одновременное отображение до 16 различных цветов.
процедуры инициализации графики – InitGraph • InitGraph( var GraphDriver, GraphMode : Integer; DriverPath : String ); • В модуле Graph для задания типа видеоадаптера определен ряд констант: • Detect = 0 – автоопределение;CGA = 1 – адаптер CGA;EGA = 3 – адаптер EGA;VGA = 9 – адаптер VGA;
Pascal • USES Graph;VARGrDr, GrMd : integer;BEGINGrDr := detect;InitGraph( GrDr, GrMd, ‘c:\bp\bgi’ ); { теперь можно вызывать графические процедуры } . . . . . . . . .CloseGraph;END.
Чтобы узнать максимальные координаты экрана в текущем режиме работы, воспользуемся стандартными функциями GetMaxX и GetMaxY. Для этого наберите небольшую программу: • Uses Graph;VarGraphDriver, GraphMode: integer;BeginGraphDriver:=detect;InitGraph(GraphDriver, GraphMode, ‘’);Writeln(GetMaxX, 'x', GetMaxY);Readln;CloseGraph;End.
Чтобы точно строить изображение на экране, Вам нужно сначала нарисовать, как это должно выглядеть на бумаге. Для этого начертите в тетради систему координат графического режима.
Чтобы переместить курсор в нужное место используют следующие процедуры: • MoveTo (X, Y), где переменные X, Y типа Integer - перемещает текущий указатель в точку с координатами (X,Y). • Например, MoveTo (200, 100) • MoveRel (dX, dY), где переменные dX, dY типа Integer - перемещает текущий указатель по горизонтали на расстояние, равное dX пикселям, а по вертикали на расстояние, равное dY пикселям. (Relation (англ.) - относительно) • Например, если после выполнения предыдущей процедуры текущий указатель находится в точке (200, 100), то после выполнения процедуры MoveRel (25, 150) он будет находится в точке с координатами (225, 250). • PutPixel(X, Y, Color), где переменные X, Y типа Integer, а Color типа Word - процедура выводит точку заданного цвета Color в точку с координатами (X, Y).
Задание • Наберите в теле программы следующие процедуры PutPixel(300, 150, Red), PutPixel(45, 420, 9) и просмотрите их действие.
Графика 26.08.2014
Line (X1, Y1, X2, Y2), где переменные X1, Y1, X2, Y2 типа Integer - рисуется линия от точки (X1, Y1) до точки (X2, Y2). • LineTo (X, Y),где переменные X, Y типа Integer - рисуется линия из точки, где находится в данный момент курсор в точку (X, Y). • LineRel (dX,dY),где переменные dX, dY типа Integer - рисуется линия из точки, где находится в данный момент курсор (X, Y) в точку (X+dX,Y+dY).
(250; 100) (50; 200) (450; 200) (400; 200) (100; 200) (100; 400) (400; 400)
USES Graph;VAR GrDr, GrMd : integer;BEGIN GrDr := detect; InitGraph( GrDr, GrMd, ‘’ ); line(100,200,400,200); line(100,200,100,400); line(400,400,100,400); line(400,400,400,200); line(50,200,250,100); line(50,200,450,200); line(250,100,450,200); CloseGraph;END.
Придумайте самостоятельно примеры с использованием всех процедур вычерчивания линий.
SetColor (Color), где переменная Color типа Word - устанавливает текущий цвет для выводимых линий и символов. • Для установка цвета фона графического экрана имеется процедура: • SetBkColor( Color )
(250; 100) (50; 200) (450; 200) (400; 200) (100; 200) (100; 400) (400; 400)
USES Graph;VAR GrDr, GrMd : integer;BEGIN GrDr := detect; InitGraph( GrDr, GrMd, ‘’ ); setcolor(red); • line(100,200,400,200); line(100,200,100,400); line(400,400,100,400); line(400,400,400,200); • Setcolor(blue) line(50,200,250,100); line(50,200,450,200); line(250,100,450,200); CloseGraph;END.
Задания: • Исправьте свою программу так, чтобы процедуры рисовали линии различных цветов. • В начерченной ранее системе координат изобразите на чертеже точки: А(150,450), В(100,350), С(350,350), D(300,450), E(200,350), F(200,50), L(250,40), K(200,20), M(300,250), X(175,400), Y(225,400), Z(275,400). • Соедините точки, получая отрезки: AB, BC, CD, AD, EK, KL, LF, FM, ME. Какая фигура у Вас получилась? • Напишите программу, рисующую эту фигуру, по вашему рисунку.
Графика 26.08.2014
Построение прямоугольников Для построения прямоугольных фигур имеется несколько процедур. Первая из них – процедура вычерчивания одномерного прямоугольника: • Rectangle( X1, Y1, X2, Y2 ), • где X1, Y1 – координаты верхнего левого угла, X2, Y2 – координаты правого нижнего угла прямоугольника.
(250; 100) (50; 200) (450; 200) (400; 200) (100; 200) (100; 400) (400; 400)
USES Graph;VARGrDr, GrMd : integer;BEGINGrDr := detect;InitGraph( GrDr, GrMd, ‘’ );setcolor(red); • rectangle(100,200,400,400); • Setcolor(blue) line(50,200,250,100); line(50,200,450,200); line(250,100,450,200); CloseGraph;END. • USES Graph;VAR GrDr, GrMd : integer;BEGIN GrDr := detect; InitGraph( GrDr, GrMd, ‘’ ); setcolor(red); • line(100,200,400,200); line(100,200,100,400); line(400,400,100,400); line(400,400,400,200); • Setcolor(blue) line(50,200,250,100); line(50,200,450,200); line(250,100,450,200); CloseGraph;END.
закрашенные прямоугольники • Bar( X1, Y1, X2, Y2 ), • где параметры X1, Y2, X2 и Y2 имеют то же смысл, что и в процедуре Rectangle. • Цвет и стиль закраски устанавливается процедурой • SetFillStyle( Pattern, Color ), • где параметр Pattern определяет стиль (шаблон) заливки, а параметр Color – ее цвет. Возможные значения параметра Pattern приведены в таблице
(250; 100) (50; 200) (450; 200) (400; 200) (100; 200) (100; 400) (400; 400)
USES Graph;VARGrDr, GrMd : integer;BEGINGrDr := detect;InitGraph( GrDr, GrMd, ‘’ );SetFillStyle(LtslashFill,blue); bar(100,200,400,400);Setcolor(blue) line(50,200,250,100); line(50,200,450,200); line(250,100,450,200); CloseGraph;END.
Для построения “объемных” закрашенных прямоугольников используется процедура: • Bar3D( X1, Y1, X2, Y2, Depth, Top ). Тип и цвет заливки устанавливается процедурой SetFillStyle. Параметр Depth определяет глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника: • Depth := (X2-X1) div 4; Параметр Top определяет, строить над прямоугольником вершину (True) или нет (False). Например: • SetFillStyle( XhatchFill, Red );Bar3D( 10, 10, 50, 100, 10, True );
Процедура вычерчивания окружностей текущим цветом имеет вид: • Circle( X, Y, Radius ), • где X, Y – координаты центра окружности, а Radius – ее радиус. Например, следующий фрагмент выводит ярко-зеленую окружность c радиусом 50 пикселов и центром в точке 450, 100: • SetColor( LightGreen );Circle( 450, 100, 50 );
вычерчивание дуг • Arc( X, Y, StartAngle, EndAngle, Radius ), • где X, Y – координаты центра дуги, StartAngle и EndAngle – начальный и конечный угол (в градусах), Radius – радиус. Очевидно, что если StartAngle = 0, а EndAngle = 359, то вычерчивается полная окружность.
Заполнение замкнутых областей • FloodFill( X, Y, Border ), • где X, Y – координаты точки внутри или вне фигуры, Border – цвет контура фигуры. Если точка (X, Y) находится внутри замкнутой области, то заполняется внутренняя область. Если эта точка находится вне замкнутой области, то заполняется ее внешняя часть. • Пример: Красная окружность заполненная зеленой штриховкой • SetColor( Red ); Circle( 450, 100, 50 );SetFillStyle( SlashFill, Green ); FloodFill( 450, 100, Red );
Установка стиля линии • SetLineStyle( Style, Pattern, Thickness ), • где Style – параметр, определяющий стиль линии. Возможные значения этого параметра приведены в таблице; Pattern – образец; Thickness – толщина линии. Если применяется один из стандартных стилей, значение параметра Pattern должно быть равно 0.
NormWidth = 1 – линия толщиной в один пикселThickWidth = 3 – линия толщиной в три пиксела