![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Параметры и атрибуты графического вывода
Если инициализация системы графики выполнена успешно, становятся доступными функции графической библиотеки для построения основных графических примитивов - отрезков прямых линий, дуг, окружностей, эллипсов, прямоугольников, секторных и столбцовых диаграмм и т.д. Многие из этих фигур могут быть по желанию программиста "залиты" текущим цветом с использованием текущего шаблона или маски заполнения. Специальные функции позволяют запоминать прямоугольные области экрана и затем восстанавливать их в специфицированном месте экрана. Все функции библиотеки графики Turbo С, генерирующие вывод информации на экран, работают в пределах текущего графического окна. Для графического вывода используется текущий цвет пиксела, установленный функцией setcolor(). При выводе отрезков прямых линий и графических примитивов система графики Turbo С позволяет определить такой параметр, как стиль линии. Turbo С поддерживает ряд предопределенных стилей линий. Как и в случае маски заполнения, пользователь может описать собственный стиль линии. Для определения текущей установки стиля используется функция getlinesettings(). Выбор подходящего стиля выполняет функция setlinestyle().
#include <graphics.h> void getlinesettings (struct linesettingstype *lineinfo) Возвращает информацию об установленном в текущий момент времени стиле "рисования" отрезков прямых линий и графических примитивов. Функция заполняет поля структурной переменной по шаблону struct linesettingstype. Структурную переменную описывает точка вызова и передает в функцию указатель lineinfo на эту переменную. Шаблон struct linesettingstype описан в заголовочном файле <graphics.h> следующим образом:
Struct linesettingstype { int linestyle; /*идентифицирует стиль линии*/ unsigned upattern;/*задает определенный пользователем стиль линии. Имеет значение только тогда, когда linestyle = USERBIT_LINE*/ int thickness; /*задает толщину линии*/ } Стиль линии задается либо целым числом, либо символической константой по табл. 2.5. Табл. 2.5. Задание стиля линий в Turbo С
Толщина линий в Turbo С может быть равна 1 или 3 пикселам. Она задается либо целым числом, либо символической константой из табл. 2.6.
Табл. 2.6. Задание толщины линий в Turbo С
После инициализации системы графики Turbo С для стиля линии устанавливается непрерывная линия толщиной 1 пиксел. Задание стиля линии выполняет функция setlinestyle().
#include <graphics.h> Void setlinestyle (int linestyle, unsigned upattern, int thickness)
Устанавливает стиль "рисования" отрезков прямых линий и графических примитивов. Аргумент linestyle выбирает стиль линии в соответствии с табл. 2.5., а аргумент thickness - толщину линии по табл. 2.6. Аргумент upattern используется только в том случае, когда задается отличный от предопределенных стиль линии, т.е. если linestyle равен USERBIT_LINE (4). При этом 16 бит аргумента upattern задают маску линии (светимость 16 подряд расположенных пикселов линии). Если бит в upattern равен 1, пиксел выводится на экран текущим цветом, установленным функцией setcolor(). Определенный пользователем стиль линии действует только в случае, когда устанавливается толщина линии 1 пиксел (NORM_WIDTH). Для толщины 3 пиксела определенный пользователем стиль линии не действует.
При выводе отрезков прямых линий в графическом режиме система графики Turbo С позволяет задать дополнительно режим вывода линии. Существуют два различных режима, устанавливаемых функцией setwritemode(). #include <graphics.h> Void setwritemode(int mode) Устанавливает режим вывода отрезков прямых линий в значение, определяемое аргументом mode. Аргумент mode может принимать одно из двух значений, описанных в <graphics.h>: COPY_PUT (0) - пикселы, лежащие на отрезке прямой линии, переопределяют пикселы на экране, и, таким образом, линия на экране имеет текущий цвет; XOR_PUT (1) - пикселы, образующие линию, имеют код цвета, образуемый операцией исключающего ИЛИ (XOR) кода текущего цвета и кода цвета пикселов на экране, через которые линия проходит. В частности, можно стереть выведенную линию с экрана, выполнив вывод линии еще раз.
Следующий параметр системы графики Turbo С - так называемый коэффициент сжатия, или коэффициент пропорциональности (aspect ratio). Он задает форму пиксела на экране монитора. Для многих мониторов световое пятно, которое соответствует пикселу, не является строго квадратным, а напоминает по форме эллипс, вытянутый вверх. Как следствие этого, линия, состоящая из одного и того же числа пикселов, расположенная вертикально, выглядит на экране длиннее, чем линия из того же числа пикселов, расположенная горизонтально. По этой же причине вывод прямоугольника, имеющего равные (в пикселах) горизонтальную и вертикальную стороны, не приводит к получению на экране квадрата. Система графики Turbo С учитывает коэффициент сжатия при выводе сложных графических примитивов - эллипсов, окружностей, дуг, круговых секторов. Благодаря этому они появляются на экране геометрически корректными. По умолчанию после инициализации системы графики Turbo С автоматически устанавливает коэффициент сжатия в соответствии с характеристиками аппаратуры видеосистемы. Для управления коэффициентом сжатия в Turbo С предусмотрены две функции: getaspectratio() и setaspectratio().
#include <graphics.h> void getaspectratio (int *xasp, int *yasp)
Заполняет две переменные, описанные точкой вызова, значениями коэффициента сжатия для текущего видеорежима. Возвращаемые значения задают фактически физическую форму пиксела. Для размера пиксела по вертикали (значение, на которое указывает yasp), всегда возвращается 10 000. Если световое пятно на экране, соответствующее пикселу, является квадратным (как для адаптера VGA), то и значение "ширины" пиксела равно 10 000. Для других видеоадаптеров пиксел на экране имеет эллипсообразную форму с большой полуосью, сориентированной по вертикали. Для таких адаптеров в ячейке, на которую указывает xasp, возвращается значение, меньшее 10 000. Зная значения геометрических размеров пиксела, можно так скорректировать параметры для функций вывода, чтобы получить на экране геометрически пропорциональные фигуры, например квадраты. Отметим, что не следует корректировать коэффициент сжатия для вывода окружностей, дуг или секторных диаграмм. Система графики Turbo С делает корректировку автоматически.
#include <graphics.h>
![]() |