русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Лекция 25-26-27

Работа в графическом режиме видеоадаптера в ОС MS-DOS

Функции для работы в графическом режиме определены в стандартном заголовочном файле graphics.h.

Так же, как и в текстовом режиме, графические функции оперируют с окнами. При запуске программы исходное окно имеет размер всего экрана. Левый верхний угол окна имеет координаты (0,0).

Текущая графическая позиция – это точка экрана, на которой закончилось рисование предыдущей фигуры, положение этой точки зависит от истории рисования фигур.

Для работы в графическом видеорежиме его необходимо установить для видеоадаптера. В состав графического пакета среды Borland C++ 3.1 входят специальные драйверы графических устройств (*.bgi) и символьные шрифты (*.chr). Наиболее часто используемый драйвер – egavga.bgi.

Необходимо установать параметр компилятора Options > Linker > Libraries > Graphics library.

void far initgraph(int far* driver, int far* mode, char far* path);

Функция устанавливает графический видеорежим. Параметр driver определяет загружаемый драйвер, параметр mode определяет видеорежим драйвера, параметр path определяет путь к директории, в которой находится драйвер. Если маршрут не указан, то предполагается, что файл находится в текущей директории.

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

Константа Значение
DETECT
EGA
VGA

Если задана константа DETECT, то тип видеоадаптера и драйвер определяются автоматически во время выполнения программы. Константы, задающие режимы для данных драйверов, приведены в таблице ниже.

Драйвер и режим Значение Разрешение Палитра Количество страниц
EGALO 640 X 200 16 цветов
EGAHI 640 X 350 16 цветов
VGALO 640 X 200 16 цветов
VGAMED 640 X 350 16 цветов
VGAHI 640 X 480 16 цветов

int far getmaxmode(void);

Функция возвращает значение максимального режима загруженного драйвера.

int far getgraphmode(void);

Функция возвращает значение текущего режима загруженного драйвера.

void far setgraphmode(int mode);

Функция устанавливает графический режим, значение которого принимает в качестве параметра, для загруженного драйвера.

void far closegraph(void);

void far restorecrtmode(void);

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

В данных графических режимах из 64 доступных цветов можно одновременно использовать лишь 16, которые образуют цветовую палитру.

В зависимости от типа видеоадаптера и установленного видеорежима система может иметь от 1 до 4 буферных страниц. Каждая из страниц может быть указана как активная, в которую происходит вывод, и визуальная, которая отображается на экране. По умолчанию активная и визуальная тсраницы совпадают.

void far cleardevice(void);

Функция очищает активную страницу.

void far setactivepage(int page);

void far setvisualpage(int page);

Функции устанавливают номер активной и визуальной страниц соответственно.

void far setviewport(int left, int top, int right, int bottom, int clip);

Функция создает графическое окно, которое становится активным, координаты левой верхней (left, top) и правой нижней (right, bottom) вершин окна являются абсолютными в системе координат экрана и передаются в качестве параметров. Если параметр clip отличен от нуля, то вывод графической информации за границы окна автоматически прерывается, если равен нулю, то вывод не прерывается. В любом случае ошибка не фиксируется.

void far clearviewport(void);

Функция очищает текущее окно и устанавливает текущую графическую позицию в левый верхний угол окна.

Для получения параметров активного окна в файле graphics.h объявлена специальная структура.

struct viewporttype {

int left, top, right, bottom;

int clip;

};

Поля left, top, right и bottom содержат координаты вершин окна, поле clip хранит значение флага, определяющего возможность выхода за границы окна.

void far getviewsettings(struct viewporttype far* viewport);

Функция заполняет структуру, адрес которой передаётся в качестве параметра, параметрами текущего окна.

int far getmaxx(void);

int far getmaxy(void);

Функции возвращают соответствующую максимальную координату экрана (разрешение экрана по соответствующей координате –1).

unsigned far imagesize(int left, int top, int right, int bottom);

Функция возвращает число байт, необходимое для хранения образа части экрана, координаты левой верхней (left, top) и правой нижней (right, bottom) вершин этого образа передаются в качестве параметров. Если необходимый размер превышает (64K-1) байтов, функция возвращает 0xFFFF (-1).

void far getimage(int left, int top, int right, int bottom, void far* bitmap);

Функция копирует битовый образ экрана в буфер памяти, адрес буфера передаётся в качестве параметра bitmap, остальные параметры содержат координаты левой верхней (left, top) и правой нижней (right, bottom) вершин этого образа.

void far putimage(int left, int top, void far* bitmap, int op);

Функция выводит битовый образ на экран из буфера памяти, адрес буфера передаётся в качестве параметра bitmap, параметры left и top содержат координаты левой верхней вершины выводимого образа. Параметр op задаёт оператор способа вывода образа на экран. Для этого в файле graphics.h объявлен специальный перечислимый тип.

enum putimage_ops {

COPY_PUT,

XOR_PUT,

OR_PUT,

AND_PUT,

NOT_PUT

};

Смысл констант приведён в таблице ниже.

COPY_PUT Копирование образа из памяти на экран
XOR_PUT На экран выводится результат операции XOR между битами образа в памяти и битами образа на экране.
OR_PUT На экран выводится результат операции OR между битами образа в памяти и битами образа на экране.
AND_PUT На экран выводится результат операции AND между битами образа в памяти и битами образа на экране.
NOT_PUT На экран выводится результат операции NOT над битами образа в памяти

void far setpalette(int index, int color);

Функция устанавливает цвет текущей палитры с номером index в цвет из набора доступных цветов, номер которого задаётся параметром color. Изменения вступают в действия на экране немедленно.

void far setbkcolor(int color);

Функция устанавливает цвет фона, параметр color задаёт номер цвета из текущей палитры. Изменения вступают в действия на экране немедленно.

int far getbkcolor(void);

Функция возвращает код текущего цвета фона из цветовой палитры.

void far putpixel(int x,int y, int color);

Функция устанавливает цвет пиксела с координатами x и y, код цвета из палитры задаёт параметр color.

unsigned int far getpixel(int x,int y);

Функция возвращает код цвета пиксела с координатами x и y.

void far setcolor(int color);

Функция устанавливает текущий цвет (которым рисуются объекты), параметр задаёт код цвета из палитры. Изменения вступают в действия для вновь выводимых объектов на экране.

int far getcolor(void);

Функция возвращает код текущего цвета из цветовой палитры.

Графические функции рисования линий можно разделить на два основных класса: для одних функций координаты фигуры полностью определяются передаваемыми им параметрами; для других функций передается лишь часть координат фигуры, остальные координаты зависят от текущей графической позиции.

int far getx(void);

int far gety(void);

Функции возвращают координату текущей графической позиции по соответствующей оси координат. Возвращаемое значение является относительным относительно текущего графического окна.

void far moveto(int x, int y);

void far moverel(int dx, int dy);

Функции устанавливают новую графическую позицию. Функция moveto() принимает в качестве параметров координаты новой позиции в окне. Функция moverel() устанавливает новую позицию в результате смещения текущей позиции на dx и dy по соответствующей координате.

void far line(int x1, int y1, int x2, int y2);

void far linerel(int dx, int dy);

void far lineto(int x, int y);

Функция line() рисует линию из точки (x1, y1) в точку (x2, y2), не изменяя текущую графическую позицию. Функция linerel() рисует линию из текущей графической позиции в точку, смещенную относительно позиции на (dx, dy), изменяя текущую графическую позицию. Функция lineto() рисует линию из текущей графической позиции в точку (x, y), изменяя текущую графическую позицию.

Общие обозначения имён параметров:

radius – радиус объекта;

xradius и yradius - горизонтальная и вертикальная оси объекта,

stangle и endangle – углы начала и конца объекта.

void far circle(int x, int y, int radius);

void far arc(int x, int y, int stangle, int endangle, int radius);

Функция circle() рисует окружность. Функция arc() рисует дугу окружности. Параметры x и y задают центр окружности.

void far ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);

Функция рисует эллипс. Параметры x и y задают центр эллипса.

void far drawpoly(int numpoints, int far* polypoints);

Функция рисует многоугольник, количество точек и массив, содержащий координаты точек, передаются в качестве параметров. Размер массива вдвое больше, чем число точек. Если необходимо нарисовать замкнутый многоугольник с N вершинами, необходимо передать в функцию N+1 точку, последняя точка должна совпадать с начальной.

void far rectangle(int left, int top, int right, int bottom);

Функция рисует прямоугольник, координаты левой верхней (left, top) и правой нижней (right, bottom) вершин передаются в качестве параметров.

Для шаблонов рисуемых линий в файле graphics.h объявлены специальная структура и перечислимые типы.

struct linesettingstype {

int linestyle;

unsigned upattern;

int thickness;

};

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

enum line_styles {

SOLID_LINE = 0,

DOTTED_LINE = 1,

CENTER_LINE = 2,

DASHED_LINE = 3,

USERBIT_LINE = 4,

};

Третье поле структуры thickness определяет ширину линии и может принимать одно из следующих значений перечислимого типа.

enum line_widths {

NORM_WIDTH = 1,

THICK_WIDTH = 3,

};

Второе поле структуры upattern используется только в том случае, если поле linestyle имеет значение USERBIT_LINE. Оно определяет шаблон линии, задаваемый пользователем. Это 16-битная маска для линии длиной 16 пикселов, значения единиц в разрядах маски определяют, будет ли данный пиксел прорисован (1 – да, 0 – нет).

Пример

upattern=39471(0x9A2F)

                               

void far getlinesettings(struct linesettingstype far* lineinfo);

Функция заполняет структуру, адрес которой передаётся в качестве параметра, текущими параметрами выводимых линий.

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

Функция устанавливает стиль выводимых линий. Смысл параметров такой же, как смысл полей структуры linesettingstype.

Для получения параметров закраски в файле graphics.h объявлена специальная структура.

struct fillsettingstype {

int pattern;

int color;

};

Поле color определяет цвет закраски, поле pattern определяет стиль закрашивания.

void far getfillsettings(struct fillsettingstype far* fillinfo);

Функция заполняет структуру, адрес которой передаётся в качестве параметра, текущими параметрами закраски.

void far setfillstyle(int pattern, int color);

Функция устанавливает шаблон и цвет закрашиваемых контуров. Параметр color определяет цвет закраски, параметр pattern определяет стиль закрашивания и может принимать одно из значений перечислимого типа fill_patterns. Ниже в таблице приведены имена и значения констант типа fill_patterns, а также пояснения.

Имя константы Значение Пояснение
EMPTY_FILL Заполнение цветом фона
SOLID_FILL Сплошное заданным цветом
LINE_FILL Горизонтальными линиями
LTSLASH_FILL Косыми линиями ///
SLASH_FILL Толстыми косыми линиями
BKSLASH_FILL Толстыми обратными косыми линиями \\\
LTBKSLASH_FILL Обратными косыми линиями
HATCH_FILL Светлая штриховка сеткой
XHATCH_FILL Крестообразная штриховка
INTERLEAVE_FILL Перекрестная штриховка
WIDE_DOT_FILL Заполнение редкими точками
CLOSE_DOT_FILL Заполнение частыми точками
USER_FILL Шаблон задаётся пользователем

void far getfillpattern(char far* pattern);

Функция записывает установленный пользователем шаблон закраски в 8-байтный массив, адрес которого передаётся в качестве параметра.

void far setfillpattern(char far* upattern, int color);

Функция устанавливает пользовательский шаблон закраски. Параметр color определяет цвет закраски. Параметр upattern является указателем на массив типа char длиной 8 элементов, задающих маску закрашивания 8X8 пикселов. Каждый элемент массива отвечает за соответствующую строку, каждый бит элемента массива – за соответствующий пиксел в строке. Если бит равен 1, соответствующий пиксел закрашивается, если 0 – нет.

Пример

char upattern [8]={169, 39, 59, 140, 77, 16, 254, 86};

A9                
               
3B                
8C                
4D                
               
FE                
               

void far floodfill(int x, int y, int bordercolor);

Функция закрашивает область заданным цветом по заданному шаблону. Параметры x и y – координаты точки области, bordercolor – цвет контура области (границы закрашиваемой области).

void far bar(int left, int top, int right, int bottom);

Функция рисует закрашенный прямоугольник, координаты левой верхней (left, top) и правой нижней (right, bottom) вершин передаются в качестве параметров.

void far bar3d(int left, int top, int right, int bottom, int depth, int topflag);

Функция рисует двухмерную проекцию закрашенного параллелепипеда, координаты левой верхней (left, top) и правой нижней (right, bottom) вершин ближней грани передаются в качестве параметров, параметр depth задаёт размер по оси аппликат, спроецированный на плоскость экрана. Если параметр topflag отличен от 0, то рисуется вся проекция, если равен 0, то не рисуется верхняя грань.

void far fillellipse(int x, int y, int xradius, int yradius);

Функция рисует закрашенный эллипс. Параметры x и y задают центр эллипса.

void far sector(int x, int y, int stangle, int endangle, int xradius, int yradius);

Функция рисует закрашенный эллиптический сектор. Параметры x и y задают центр сектора.

void far fillpoly(int numpoints, int far* polypoints);

Функция рисует закрашенный многоугольник, параметры функции такие же, как и у функции drawpoly().

void far pieslice(int x, int y, int stangle, int endangle, int radius);

Функция рисует закрашенный круговой сектор. Параметры x и y задают центр сектора.

void far outtext(char far* textstring);

void far outtextxy(int x, int y, char far* textstring);

Функции выводят на экран строку текста, адрес которой принимают в качестве параметра textstring. Функция outtext() выводит текст начиная с текущей графической позиции, функция outtextxy() начальную позицию для вывода текста принимает в качестве аргументов x и y.

int far textheight(char far* textstring);

int far textwidth(char far* textstring);

Функции возвращают высоту и ширину выводимой строки текста в пикселах.

Для получения параметров выводимого в графическом режиме текста в файле graphics.h объявлена специальная структура.

struct textsettingstype {

int font;

int direction;

int charsize;

int horiz;

int vert;

};

Поле font определяет тип используемого шрифта и может принимать значения констант специального перечислимого типа, объявленного в файле graphics.h.

enum font_names {

DEFAULT_FONT = 0, /* 8x8 bit mapped font */

TRIPLEX_FONT = 1, /* "Stroked" fonts */

SMALL_FONT = 2,

SANS_SERIF_FONT = 3,

GOTHIC_FONT = 4,

SCRIPT_FONT = 5,

SIMPLEX_FONT = 6,

TRIPLEX_SCR_FONT = 7,

COMPLEX_FONT = 8,

EUROPEAN_FONT = 9,

BOLD_FONT = 10

};

Для использования шрифтов, значения констант которых начинаются с 1, необходимо подгружать данные шрифты из *.chr файлов.

Поле direction определяет направление графического вывода. Для его задания в файле graphics.h объявлены соответствующие макросы, описанные в таблице ниже.

Имя Значение Направление вывода текста
HORIZ_DIR Слева направо
VERT_DIR Снизу вверх

Поле charsize определяет размер одного знакоместа в пикселах. Варианты значений приведены в таблице.

Значение Размер знакоместа в пикселах
8X8
16X16
80X80

Поля horiz и vert определяют горизонтальное и вертикальное выравнивание текста соответственно и могут принимать значения констант специального перечислимого типа, объявленного в файле graphics.h.

enum text_just {

LEFT_TEXT = 0,

CENTER_TEXT = 1,

RIGHT_TEXT = 2,

BOTTOM_TEXT = 0,

/* CENTER_TEXT = 1, */

TOP_TEXT = 2

};

Поле Константа Выравнивание
horiz LEFT_TEXT Слева
horiz CENTER_TEXT Центрированный текст
horiz RIGHT_TEXT Справа
vert BOTTOM_TEXT Снизу
vert CENTER_TEXT Центрированный текст
vert TOP_TEXT Сверху

void far gettextsettings(struct textsettingstype far* texttypeinfo);

Функция заполняет структуру, адрес которой передаётся в качестве параметра, текущими параметрами выводимого текста.

void far settextstyle(int font, int direction, int charsize);

Функция устанавливает параметры выводимого текста, назначение параметров аналогично назначению одноимённых полей структуры textsettingstype.

void far settextjustify(int horiz, int vert);

Функция устанавливает параметры выравнивания выводимого текста, назначение параметров аналогично назначению одноимённых полей структуры textsettingstype.

void far setusercharsize(int multx, int divx, int multy, int divy);

Функция устанавливает пользовательский размер шрифта для подгружаемых из файлов шрифтов, параметры функции задают коэффициенты умножения и деления по соответствующим координатам. Исходный размер шрифта по соответствующей координате умножается на число mult/div.

void far graphdefaults(void);

Функция устанавливает значения всех графических параметров в значения по умолчанию.

Во время работы программы могут возникнуть ошибки выполнения.

int far graphresult(void);

Функция возвращает код ошибки выполнения последней графической операции, который может принимать значения констант специального перечислимого типа graphics_errors, объявленного в файле graphics.h.

char* far grapherrormsg(int errorcode);

Функция возвращает текстовую строку с сообщением об ошибке по заданному коду ошибки, который принимает в качестве параметра errorcode. Ниже в таблице приведены константы graphics_errors, их численные значения и соответствующие текстовые сообщения об ошибках.

Код Константа Тестовая строка
grOk No error
-1 grNoInitGraph (BGI) graphics not installed
-2 grNotDetected Graphics hardware not detected
-3 grFileNotFound Device driver file not found ()
-4 grInvalidDriver Invalid device driver file ()
-5 grNoLoadMem Not enough memory to load driver
-6 grNoScanMem Out of memory in scan fill
-7 grNoFloodMem Out of memory in flood fill
-8 grFontNotFound Font file not found ()
-9 grNoFontMem Not enough memory to load font
-10 grInvalidMode Invalid graphics mode for selected driver
-11 grError Graphics error
-12 grIOerror Graphics I/O error
-13 grInvalidFont Invalid font file ()
-14 grInvalidFontNum Invalid font number
-18 grInvalidVersion Invalid File Version Number

Просмотров: 481


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.