Graphics h c функции

detectgraph() — определяет графический драйвер и графический режим при проверке аппаратного обеспечения
initgraph() — установка видеорежима
restorecrtmode() — восстановление текстового режима
graphresult() — возвращает код ошибки выполнения последней графической операции
grapherrormsg() — возвращает указатель на строку сообщения об ошибке
closegraph() — выход из графического режима

getdrivername() — возвращает указатель на строку, содержащую имя текущего графического драйвера
getmaxmode() — возвращает максимальный номер режима для текущего драйвера

getaspectratio() — возвращает текущее характеристическое отношение ширины изображения к его высоте графического режима
setaspectratio() — установка коэффициента сжатия

getgraphmode() — возвращает текущий графический режим
getmodename() — возвращает указатель на строку, содержащую имя указанного графического режима
getmoderange() — получает диапазон режимов для данного графического драйвера

graphdefaults() — переустанавливает все графические параметры в их начальные значения

installuserdriver() — добавляет дополнительные драйверы устройств в таблицу драйверов устройств BGI
installuserfont() — загружает файл со шрифтом

Фигуры

line() — рисует линию между двумя указанными точками
linerel() — рисует линию на заданное расстояние от текущей позиции CP
lineto() — рисует линию от текущей позиции

circle() — рисует окружность заданного радиуса
ellipse() — эллиптическая дуга
arc() — дуга окружности
getarccoords() — выдает координаты последнего обращения к функции arc
ellipse() — эллиптическая дуга

rectangle() — рисует прямоугольник
drawpoly() — рисует контур многоугольника

getx() — возвращает координату x текущей графической позиции
gety() — возвращает координату y текущей графической позиции
moveto() — изменение значения текущего положения пера (CR)

Заполненые фигуры

bar() — прямоугольник
bar3d() —
fillpoly() — рисует и закрашивает многоугольник

fillellipse() — рисует и закрашивает эллипс
sector() — рисует заполненный эллиптический сектор
pieslice() — рисует заполненный сектор круга

Цвет и заливка

setcolor() — установка цвета
getcolor() — возвращает текущий цвет рисунка
getmaxcolor() — возвращает максимальное значение цвета, которое может быть передано функции setcolor
setbkcolor() — установка цвета фона
getbkcolor() — возвращает текущий цвет фона

putpixel() — установить цвет пикселя
getpixel() — возвращает цвет заданной точки

Работа с палитрой

setpalette() — изменение цвета в палитре
getpalette() — получает информацию о текущей палитре
setrgbpalette() — изменение цвета в палитре по системе RGB
getdefaultpalette() — возвращает структуру определения палитры
getpalettesize() — возвращает размер справочной таблицы цветов палитры

Стиль и заливка

floodfill() — заполняет ограниченную область
setfillstyle() — устанавливает цвет и шаблон заполнения
getfillsettings() — получает информацию о текущем шаблоне и цвете заполнения
setfillpattern() — задаёт шаблон заполнения определяемый пользователем
getfillpattern() — возвращает определенный пользователем шаблон заполнения

Читайте также:  Импульсный блок питания увлажнителя воздуха

setlinestyle() — установка ширины и стиля линии
getlinesettings() — получает текущий цвет линии, шаблон и толщину

Окна и страницы

cleardevice() — очистка активной страницы
setactivepage() — устанавливает номер активной сраницы
setvisualpage() — устанавливает номер выводимой страницы

clearviewport() — очищает текущее окно
setviewport() — создаёт графическое окно
getviewsettings() — вызывает информацию об активном окне

getmaxx() — возвращает максимальную координату х экрана
getmaxy() — возвращает максимальную координату y экрана

Графические образы

getimage() — запоминает в битовый образ некоторой области экрана
imagesize() — возвращает количество байтов, требуемых для хранения битового образа
putimage() — помещает на экран ранее записанный в память образ

Текст

outtext() — выводит строку на экран с текущей позиции
outtextxy() — выводит строку на экран с заданной позицией

settextstyle() — устанавливает шрифт, стиль и коэффициент увеличения шрифта
setusercharsize() — устанавливает пользовательский размер шрифта
settextjustify() — устанавливает режим выравнивания текста

textheight() — возвращает ширину строки в пикселях
textwidth() — возвращает высоту строки в пикселях

Память

_graphfreemem() — освобождает графическую память
_graphgetmem() — захватывает графическую память

Монитор ПК может работать в двух режимах текстовый и графический. В этих режимах по разному представляется видео память. Переход из режима в режим очищает экран. В графическом режиме необходимо пользоваться функциями из графической библиотеки graphics.h .

Типы видео мониторов и их режимы

Существует много типов мониторов, на каждом из которых доступны кроме своего режима, и все более низкие режимы. Под режимом понимается разрешающая способность количество цветов. Кроме того мониторы делятся по аппаратной реализации: ЦИФРОВЫЕ и АНАЛОГОВЫЕ.

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

Инициализация графики

initgraph(int *GrDr,int *GrMod,char *Path) ;

Функция initgraph(. ) инициализирует графический режим. В параметрах ей передается:

GrDr — Тип графического монитора, или DETECT — Определить максимально возможный. Тип установленного оборудования возвращается в этих же переменных (поэтому они и передаются указателем).

Path — Путь до файлов *.bgi — драйверов графических режимов. Если указанно " " — то в текущем каталоге.

Значения и имена можно взять из предыдущей таблицы.

Функция graphresult() — возвращает код ошибки инициализации графики (недопустимый графический режим, не найден файл *.bgi и т.п.). Если все в порядке функция возвращает значение grOk. Проверку правильного выполнения функции initgraph(. ) обязательно надо производить, так как, если графический режим не установлен, выполнение любой графической команды приведет к аварийному останову программы.

Функция closegraph() обеспечивает корректное возвращение в текстовый режим. Ее выполнение, как говорилось раньше, очищает экран. При необходимости вставляйте задержку до нажатия клавиши: getch(). Внимание!

Читайте также:  Вычислить тройной интеграл если область ограничена поверхностями

Работа с графикой возможна только в моделях памяти >= medium, это устанавливается в опциях компилятора. Для работы с библиотекой графики ее необходимо подключить. В опциях Си: OptionLinkerLibriryGraphics: X

Для того чтобы студент мог свободно читать тексты программ на языке C++ желательно ознакомиться с тем положительным опытом программирования графики, накопленным с DOS средах. Все лучшее созданное там было перенесено в Windows программирование. Дадим сравнение программирования графики в DOS и Windows средах.

2.1 Базовая графика в среде Borland С++ 3.1

В настоящее время во всех современных компьютерах применяется графический режим вывода информации, а операционная система Windows не знает символьного режима. В языке программирования C++ с реализацией под операционную систему DOS графические функции хранятся в библиотеке graphics.lib , а прототипы (объявления) этих функций находятся в файле graphics.h . Мы будем рассматривать графические функции не в отрыве от практического применения, но наоборот обратим особое внимание на логику составления графических программ. Это понадобится вам при изучении технологии DirectDraw в C++ Builder под Windows, так как в технологии DirectDraw для обеспечения быстрого вывода изображения на дисплей переняты лучшие воплощения графических функций для операционной системы DOS.

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

Самым первым вопросом работы с графикой является проверка работоспособности графического режима в вашей среде программирования. Следующий пример (листинг 4.1) написан именно с данной целью. Скомпилируйте его.

Листинг 2.1. Демонстрация работы графического режима

// proba1.cpp #include #include #include #include int main(void)

int gdriver = DETECT, gmode, errorcode; /* Инициализация графического режима */ initgraph(&gdriver, &gmode, "");

/* Результат инициализации */ errorcode = graphresult();

if (errorcode != grOk) /* Если ошибка */

getch(); exit(1); /* Завершить программу */

/* 2. Рисование линии из правого верхнего угла в левый нижний */ line(0, 0, getmaxx(), getmaxy());

/* 3. Закрытие графического режима */ getch(); closegraph();

Если вы не внесли опечаток в текст программы, тогда файл proba1.exe начнет работать. По диагонали экрана должна рисоваться на черном фоне белая линия из правого верхнего угла в левый нижний угол.

2.1.2 Типовые ошибки инициализации

Возможны три причины, по которым программа proba1.exe с графикой будет работать не так, как мы предположили.

Первая — отсутствие в рабочей папке с исполняемым файлом proba1.exe файла драйвера egavga.bgi . Результатом работы программы будет сообщение:

Ошибка инициализации: Device driver file not found Нажми любую клавишу (Press any key to halt)

Это как-то даже неуместно называть проблемой. Из папки BGI среды программирования файл egavga.bgi переписывается в вашу рабочую папку и все.

Другой вариант. Файл egavga.bgi «лежит» в папке рядом с файлом proba1.exe , но линия не рисуется. Если программа proba1.exe начинает вытворять неизвестно что (или выдает другую ошибку или по экрану начинает «бегать» курсор), тогда смело сотрите старый драйвер egavga.bgi и поищите у знакомых или на дисках новую версию. «Ломаные» драйверы встречаются не так редко.

Читайте также:  Otg переходник micro usb usb

Третья причина — это экзотический «баг». Она встречается в основном в компьютерных сетях. По неизвестной причине файл драйвера egavga.bgi отказывается работать до тех пор, пока с этого файла не снять атрибут «только для чтения». Надеюсь, что вы не работаете с удаленного компьютера в сети, поскольку там есть еще ряд особенностей работы среды программирования, связанных c загрузкой среды с другого компьютера и атрибутами «только для чтения».

2.1.3 Графические примитивы

Основу мы уже заложили: знаем, как переключиться в графический режим, где применить функции и как правильно завершить работу графической части. Теперь займемся непосредственно разбором примеров с рисованием графических функций. Самые простые функции называются графическими примитивами. Условно примитивы можно разделить на группы: примитивы рисования контуров и площадные фигуры. К примитивам контуров относятся: линии ( line ), прямоугольники ( rectangle ), дуги ( arc ), окружности ( circle ), эллипсы ( ellipse ), многоугольники ( drawpoly ) и прочие не закрашиваемые внутри фигуры. Площадными, закрашиваемыми внутри фигурами являются прямоугольники ( bar , bar3d ), круговые и эллиптические секторы ( pieslice, sector ). Если у вас фигура замкнута, но не залита, например, многоугольник ( drawpoly ), то его всегда можно закрасить внутри с помощью функций закраски ( floodfill , setfillstyle ). Для выбора цвета рисования применяется функция задания текущего (по умолчанию) цвета графических примитивов ( setcolor ). Для определения цвета точки по ее координатам на экране существует функция getpixel , а для

вывода точки заданным цветом на экран — setpixel . Вот и весь смысл работы с выводом графических примитивов. Данная логика интуитивно понятна обычному школьнику. Подробное описание и параметры графических функций можно найти в любом справочнике по C++. Если у вас под рукой нет справочника, тогда наберите в редакторе среды программирования интересующее вас имя функции, наведите на него курсор и нажмите комбинацию клавиш Ctrl+F1 . На экране появится описание функции и внизу подсказки ссылка на пример программы с выбранной графической функцией. Например, если вы введете имя функции rectangle и нажмете нужные клавиши, появится подсказка по функции рисования прямоугольника с характерным примером применения. Но кое-что вы можете увидеть и в примере из листинга 2.2, в котором воедино собраны некоторые распространенные функции для работы с примитивами.

Листинг 2.2. Демонстрация работы графических функций

// rectangl.cpp #include #include #include #include void main(void)

int stangle=0, endangle=360, xradius=40, yradius=25; int radius=25;

int stangle_arc = 90, endangle_arc = 225; int xb=0, yb=200, midx, midy;

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

initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if (errorcode != grOk) <

printf("Ошибка: %s
", grapherrormsg(errorcode)); printf("Нажмите любую клавишу"); getch(); exit(1); >