Модуль Graph . Работа с экраном в графическом режиме
Модуль Graph поддерживает графический режим работы дисплея. В этом режиме любое изображение на экране дисплея синтезируется из множества мельчайших элементов, называемых пикселями. Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между отдельными пикселями отсутствуют. Если группа смежных пикселей светится, то они воспринимаются не как совокупность отдельных точек, а как сплошной участок. Таким образом, на экране дисплея может быть синтезировано любое графическое изображение.
В графическом режиме экран дисплея разделяется прямоугольной сеткой, каждый элемент которой имеет свои координаты. Левый верхний угол экрана имеет координаты (0,0). Значение левой координаты (X) увеличивается в горизонтальном направлении слева направо. Значение правой координаты (Y) увеличивается в вертикальном направлении сверху вниз. Количество точек по горизонтали и вертикали называется разрешающей способностью.
Координаты правой нижней границы экрана можно определить, используя функции GetMaxX и GetMaxY.
Реализация графического режима в ПЭВМ обеспечивается благодаря наличию специальной схемы, называемой графическим адаптером. ПЭВМ может комплектоваться следующими типами графических адаптеров: CGA, VCGA, EGA, VGA, Hercules, AT&T, PC-3270, IBM-8514. Работу графического адаптера поддерживает специальная программа, называемая драйвером. Загрузочный модуль драйвера хранится в специальном файле с расширением bgi. Используемый адаптер может функционировать в различных режимах.
Рассмотрим пример инициализации (установки) графического режима:
USES Graph;
VARGd,Gm:integer;
BEGIN
Gd:=Detect;
InitGraph(Gd,Gm,'');
IF GraphResult< >grOk THEN Halt(1);
...CloseGraph
END.
Графический режим инициализируется с помощью стандартной процедуры InitGraph. При этом переменным Gd и Gm необходимо указать номер адаптера и номер графического режима. Если переменной Gd предварительно присвоить значение константы Detect, описанной в модуле Graph (ее значение 0), то при загрузке драйвера программа выполнит автоматическое распознавание типа адаптера. При этом если есть выбор графических режимов, то устанавливается тот из них, который обеспечивает более высокое качество изображения. Третий параметр процедуры InitGraph - путь до файла с загрузочным модулем драйвера. Если путь отсутствует, то поиск этого файла будет осуществляться в текущем каталоге. Ошибки, которые могут возникать при инициализации графического режима, анализируют с помощью функции GraphResult. Для выхода из графического режима используется стандартная процедура CloseGraph. Эта процедура восстанавливает режим, существовавший до инициализации графики.
Для создания графических изображений модуль Graph предоставляет широкий набор процедур и функций. Рассмотрим точки и линии.
1. PutPixel(X,Y:integer;Color:word) - ставит на экране точку с координатами (X,Y) цвета Color.
2. Line(X1,Y1,X2,Y2:integer) - выводит на экран линию, соединяющую точки с координатами (X1,Y1) и (X2,Y2).
3. Rectangle(X1,Y1,X2,Y2:integer) - выводит на экран изображение прямоугольника с координатами диагонали (X1,Y1) и (X2,Y2).
4. Circle(X,Y:integer;Radius:word) - выводит на экран изображение окружности с координатами центра (X,Y) и радиусом (Radius).
5. Ellipse(X,Y :integer; StAngle, EndAngle, XRadius, YRadius: word) - выводит на экран изображение эллиптической дуги с центром в точке (X,Y) от начального угла StAngle до конечного угла EndAngle с горизонтальной полуосью XRadius и вертикальной YRadius. Отсчет углов осуществляется относительно горизонтальной оси в направлении против часовой стрелки (3 часа - 0, 12 часов - 90 и т.д.) Если StAngle=0, а EndAngle=360, то будет выведено изображение полного эллипса.
Установка цвета линий осуществляется процедурой SetColor(Color:integer). Цвет фона SetBkColor(Color:word).
Рассмотрим пример:
USES Graph;
VARGd,Gm:integer;
BEGIN
Gd:=Detect;
InitGraph(Gd,Gm,'d:\bp\bgi');
rectangle(100,50,200,100);
line(100,50,200,100);
line(100,100,200,50);
ellipse(150,75,0,360,50,25);
readln;
CloseGraph
END.
Дата добавления: 2016-06-15; просмотров: 2075;