Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций -=Вычислительная техника и прог...docx
Скачиваний:
11
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

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

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

Смена графического окна может быть выполнена с помощью функции setviewport:

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

Её аргументами являются координаты окна, а также логическое выражение (clip), определяющее требуется ли отсекать части изображения, выходящие за пределы окна или нет. Все графические операции касаются текущего графического окна, а координаты графического курсора всегда отсчитываются от верхнего левого угла экрана. Графический курсор невидим, но его текущие координаты можно определить с помощью функций getx и gety. Переместить курсор в требуемую позицию можно с помощью функций:

void far moveto(int x, int y);

void far moverel(int dx, int dy);

Первая перемещает курсор в позицию. Заданную координатами x и y. Вторая перемещает курсор относительно текущей позиции на вектор ( dx , dy ). Для очистки графического окна используется функция:

void far clearviewport(void);

При построении графических образов необходимо помнить, что на экране дисплея содержится разное количество пикселей по вертикали и горизонтали, а также то, что вертикальный и горизонтальный размеры пикселя неодинаковы. Это приводит к тому, что горизонтальный и вертикальный отрезки, содержащие одинаковое количество пикселей, на экране будут выглядеть как отрезки разной длины. Для правильного отображения требуется знать коэффициент пропорциональности (aspect ratio). Его можно определить с помощью функции:

void far getaspectration(int far *xasp, int far *yasp);

Эта функция через свои аргументы возвращает искомое значение, причем *yasp всегда устанавливается равным 10000, величина *xasp<=*yasp. Отношение *xasp к *yasp и даёт коэффициент пропорциональности.

5.1.3. Управление цветом и стилем заполнения фигур

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

Цвета нумеруются от 0 до getmaxcolor(). Выбор номера цвета для изображения обеспечивает функция setcolor(int color). Цвет фона может быть изменен функцией setbkcolor(int color). После выполнения функции setcolor(n) все объекты изображаются в цвете, связанном с позицией n палитры цветов. Числа от 0 до 15, которые используются для обозначения цветов, определяют цветовые атрибуты пикселя или, как их ещё называют, «программные цвета». Каждому программному цвету присваивается аппаратный цвет из полной палитры в 256 цветов.

В программе для указания цвета можно вместо его номера использовать константы перечислимого типа COLORS, обозначающие цвета:

enum COLORS{BLACK, BLUE, GREEN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE};

Для управления соответствием между программными и аппаратными цветами используется ряд функций. Например, вызов setpalette(0,RED) присваивает первому цвету палитры красный цвет.

Для закрашивания геометрических фигур используются функции, заполняющие контур в соответствующем стиле:

setfillstyle(int pattern, int color);

floodfill(int x, int y,int border);

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

Например:

EMPTY_FILL — заливка цветом фона;

SOLID_FILL — заливка заданным цветом;

LINE_FILL — штриховка горизонтальными линиями;

LTSLASH_FILL — диагональная штриховка и др.

Их символические имена задаются перечислимым типом fill_patterns.