ЗНАЕТЕ ЛИ ВЫ?

Параметры и атрибуты графического вывода



Если инициализация системы графики выполнена успешно, становятся доступными функции графической библиотеки для построения основных графических примитивов - отрезков прямых линий, дуг, окружностей, эллипсов, прямо­угольников, секторных и столбцовых диаграмм и т.д. Многие из этих фигур могут быть по желанию программиста "залиты" текущим цветом с использованием текущего шаблона или маски заполнения. Специальные функции позволяют запоминать прямоугольные области экрана и затем восстанавливать их в специфицированном месте экрана.

Все функции библиотеки графики, генерирующие вывод информации на экран, работают в пределах текущего графического окна. Для графического вывода используется текущий цвет пиксела, установленный функцией setcolor().

При выводе отрезков прямых линий и графических примитивов система графики позволяет определить такой параметр, как стиль линии. С++ поддерживает ряд предопределенных стилей линий. Как и в случае маски заполнения, пользователь может описать собственный стиль линии. Для определения текущей установки стиля используется функция getlinesettings(). Выбор подходящего стиля выполняет фун­кция setlinestyle().

 

void getlinesettings (struct linesettingstype *lineinfo)

 

Возвращает информацию об установленном в текущий момент времени стиле "рисования" отрезков прямых линий и графических примитивов. Функция заполняет поля структурной переменной по шаблону struct linesettingstype. Структурную переменную описывает точка вызова и передает в функцию указатель lineinfo на эту переменную. Шаблон struct linesettingstype описан в заголовочном файле <graphics.h> следующим образом:

 

struct linesettingstype

{

int linestyle; /*идентифицирует стиль линии*/

unsigned upattern; /*задает определенный пользователем стиль линии. Имеет значение только тогда, когда linestyle = USERBIT_LINE*/

int thickness; /*задает толщину линии*/

}

Стиль линии задается либо целым числом, либо символи­ческой константой по табл. 3.5.

Табл. 3.5. Задание стиля линий

Символическая константа Значение Описание стиля линии
SOLID_LINE DOTTED_LINE CENTER_LINE DASHED_LINE USERBIT_LINE Сплошная (непрерывная) линия Линия из точек .... Штрих-пунктирная линия -.-. Штриховая линия Определенная пользователем линия. Ее шаблон описывает поле upattern в структуре linesettingstype

 

Толщина линий может быть равна 1 или 3 пикселам. Она задается либо целым числом, либо символической константой из табл. 3.6.

 

Табл. 3.6. Задание толщины линий в Turbo С

Символическая константа Значение Толщина
NORM_WIDTH THICK_WIDTH Задает толщину линии 1 пиксел Задает толщину линии 3 пиксела

 

После инициализации системы графики для стиля линии устанавливается непрерывная линия толщиной 1 пиксел. Задание стиля линии выполняет функция setlinestyle().

 

void setlinestyle (int linestyle, unsigned upattern, int thickness)

 

Устанавливает стиль "рисования" отрезков прямых линий и графических примитивов. Аргумент linestyle выбирает стиль линии в соответствии с табл. 3.5., а аргумент thickness - толщину линии по табл. 3.6.

Аргумент upattern используется только в том случае, когда задается отличный от предопределенных стиль линии, т.е. если linestyle равен USERBIT_LINE (4). При этом 16 бит аргумента upattern задают маску линии (светимость 16 подряд расположенных пикселов линии). Если бит в upattern равен 1, пиксел выводится на экран текущим цветом, установленным функцией setcolor(). Определенный пользователем стиль линии действует только в случае, когда устанавливается толщина линии 1 пиксел (NORM_WIDTH). Для толщины 3 пиксела определенный пользователем стиль линии не действует.

 

При выводе отрезков прямых линий в графическом режиме система графики позволяет задать дополнительно режим вывода линии. Существуют два различных режима, устанавливаемых функцией setwritemode().

 

void setwritemode(int mode)

 

Устанавливает режим вывода отрезков прямых линий в значение, определяемое аргументом mode. Аргумент mode может принимать одно из двух значений, описанных в <graphics.h>: COPY_PUT (0) - пикселы, лежащие на отрезке прямой линии, переопределяют пикселы на экране, и, таким образом, линия на экране имеет текущий цвет; XOR_PUT (1) - пикселы, образующие линию, имеют код цвета, образуемый операцией исключающего ИЛИ (XOR) кода текущего цвета и кода цвета пикселов на экране, через которые линия проходит. В частности, можно стереть выведенную линию с экрана, выполнив вывод линии еще раз.

 

Следующий параметр системы графики - так называемый коэффициент сжатия, или коэффициент пропорциональности (aspect ratio). Он задает форму пиксела на экране монитора. Для многих мониторов световое пятно, которое соответствует пикселу, не является строго квадратным, а напоминает по форме эллипс, вытянутый вверх. Как следствие этого, линия, состоящая из одного и того же числа пикселов, расположенная вертикально, выглядит на экране длиннее, чем линия из того же числа пикселов, расположенная горизонтально. По этой же причине вывод прямоугольника, имеющего равные (в пикселах) горизонтальную и вертикальную стороны, не приводит к получению на экране квадрата. Система графики учитывает коэффициент сжатия при выводе сложных графических примитивов - эллипсов, окружностей, дуг, круговых секторов. Благодаря этому они появляются на экране геометрически корректными. По умолчанию после инициализации системы графики автоматически устанавливает коэффициент сжатия в соответствии с характеристиками аппаратуры видеосистемы. Для управления коэффициентом сжатия в предусмотрены две функции: getaspectratio() и setaspectratio().

 

void getaspectratio (int *xasp, int *yasp)

 

Заполняет две переменные, описанные точкой вызова, значениями коэф­фициента сжатия для текущего видеорежима. Возвращаемые значения задают фактически физическую форму пиксела. Для размера пиксела по вертикали (значение, на которое указывает yasp), всегда возвращается 10 000. Если световое пятно на экране, соответствующее пикселу, является квадратным (как для адаптера VGA), то и значение "ширины" пиксела равно 10 000. Для других видеоадаптеров пиксел на экране имеет эллипсообразную форму с большой полуосью, сориентированной по вертикали. Для таких адаптеров в ячейке, на которую указывает xasp, возвращается значение, меньшее 10 000. Зная значения геометрических размеров пиксела, можно так скорректировать параметры для функций вывода, чтобы получить на экране геометрически пропорцио­нальные фигуры, например квадраты. Отметим, что не следует корректировать коэффициент сжатия для вывода окружностей, дуг или секторных диаграмм. Система графики делает корректировку автоматически.

 

void setaspectratio (int xasp, int yasp)

 

Устанавливает новое значение коэффициента сжатия, которое будет ис­пользоваться системой графики при выводе геометрических примитивов - прямоугольников, дуг, окружностей, эллипсов. Аргумент xasp отображает в условных единицах ширину пиксела на экране, yasp - высоту пиксела. Например, если известно, что высота пиксела на экране в 1.2 раза больше, чем его ширина, геометрически корректный вывод будет получен при задании такого коэффициента сжатия:

setaspectratio(100,120);

Рекомендуемое использование функции - корректировка вывода графической информации при использовании нестандартных мониторов, для которых не может автоматически определить корректное значение коэффициента сжатия, а также корректировка графического вывода для мониторов с некорректной линейностью по вертикали и горизонтали.

 

Последние из параметров графической системы, влияющие на вывод графической информации, это маска заполнения и стиль заполнения. Маска заполнения позволяет задать способ заполнения отдельных областей экрана. Она определяется восьмибайтовым шаблоном, рассматриваемым как битовая карта 8x8. Заполняемая область также разбивается на блоки (знакоместа) по 8x8 пикселов. Маска "накладывается" на каждое такое знакоместо по следующему правилу: если соответствующий бит в маске заполнения равен 1, то пиксел в знакоместе имеет код текущего цвета; в противном случае пиксел остается неизменным. Для работы с масками заполнения система графики содержит функции getfillpattern() и setfillpattern().

 

void getfillpattern (char * pattern)

 

Заполняет область памяти из 8 байт, описанную точкой вызова, текущим значением маски заполнения. Аргумент pattern указывает на начало описанной области памяти. Маска заполнения может иметь одно из предопределенных значений или описываться пользователем.

 

void setfillpattern (char *upattern, int color)

 

Задает цвет пикселов и маску для заполнения областей экрана. По умолчанию используется белый цвет и маска заполнения, состоящая из матрицы единиц во всех битах. Таким образом, по умолчанию все пикселы заполняемой области имеют белый цвет. Аргумент upattern указывает на начало области из 8 байт, задающих новую маску заполнения. Первый байт задает пикселы самой верхней строки в пределах знакоместа. Старший бит первого байта соответствует самому левому пикселу знакоместа. Аргумент color задает цвет пикселов.

 

Для удобства пользователей библиотека графики содержит целую группу предопределенных комбинаций символ/цвет заполнения областей экрана. Пару значений символов/цветов часто называют стилем заполнения (filling style). Для работы с предопределенными стилями используется пара функций getfillsettings() и setfillstyle().

 

void getfillsettings( struct fillsettingstype *fillinfo)

 

Заполняет поля структурной переменной по шаблону struct fillsettingstype информацией о текущей маске и цвете заполнения. Структурную переменную по шаблону struct fillsettingstype описывает точка вызова. Аргумент fillinfo указывает на описанную точкой вызова структурную переменную. Шаблон struct fillsettingstype определен в <graphics.h> так:

 

struct fillsettingstype

{

int pattern; /* идентификатор маски заполнения */

int color; /* цвет заполнения */

}

Идентификатором предопределенных масок заполнения служит или целое число или символическая константа (табл. 3.7.).

В случае, когда используется определенная пользователем маска заполнения, поле pattern в структурной переменной, заполняемой функцией getfillsettings(), равно 12.

Табл. 3.7. Задание предопределенных масок

Символическая константа Значе­ние Описание стиля заполнения
EMPTY FILL Заполнение цветом фона
SOLID FILL Заполнение текущим цветом
LINE FILL Заполнение символами --, цвет - color
LTSLASH_FILL Заполнение символами // нормальной толщины, цвет - color
SLASH_FILL Заполнение символами // удвоенной толщины, цвет - color
BKSLASH_FILL Заполнение символами \\ удвоенной толщины, цвет - color
LTBKSLASH_FILL Заполнение символами \\ нормальной толщины, цвет - color
HATCH_FILL Заполнение вертикально-горизонтальной штриховкой тонкими линиями, цвет-color
XHATCH_FILL Заполнение штриховкой крест-накрест по диагонали "редкими" тонкими линиями, цвет - color
INTERLEAVE_FILL Заполнение штриховкой крест-накрест по диагонали "частыми" тонкими линиями, цвет - color
WIDE DOT FILL Заполнение "редкими" точками    
CLOSE DOT FILL Заполнение "частыми" точками
USER FILL Заполнение по определенной пользователем маске заполнения, цвет - color

 

void setfillstyle(int pattern, int color)

 

Выбирает один из предопределенных стилей заполнения. Значение pattern идентифицирует стиль. Возможные значения для pattern приведены в табл. 3.7. Аргумент color задает цвет, используемый для пикселов по заданному шаблону. Данная функция не предназначена для установки определенной пользователем маски заполнения. Для этого используется функция setfillpattern().

 





Последнее изменение этой страницы: 2016-06-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.66.86 (0.009 с.)