Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_10_graf.DOC
Скачиваний:
19
Добавлен:
17.05.2015
Размер:
717.82 Кб
Скачать

Лекція 10. Графіка в Сі

Для організації графіки фірми BORLAND випустила ряд універсальних графічних драйверів – програм, які забезпечують взаємодію програмної та апаратної частини комп’ютера. Графічні каталоги знаходяться в каталозі BGI і мають таке ж розширення, а саме *.bgi

(BGI – Borland Graphics Interface). Ім’я файла звичайно відображає, для роботи з яким саме графічним режимом він призначається. В нашому випадку це файл egavga.bgi. Крім шаблону в програмі, потрібно в меню Options LinkerLibraries… поставити хрестик в рядку Graphics library, якщо це ще не зробили до вас.

Дисплей персонального комп’ютера може працювати в одному із двох режимів: текстовому і графічному. Розглянемо роботу в графічному режимі. Треба нагадати, що графічний драйвер мови Сі подібний графічному драйверу мови Паскаль і за деяким винятком, використовуються такі ж графічні функції.

Ініціювання графічної системи. Обробка помилок

Переключення режимів.

  1. Вибір драйвера і графічного режиму виконує функція detectgraph (&gd, &gm);

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

  1. Завантаження драйвера, ініціалізацію графічної системи виконує функція

initgraph (&gd, &gm, “шлях до BGI-файлу”);

Значеннями змінних gd, gm повинні бути номер потрібного драйвера і номер бажаного графічного режиму. Якщо файл з вказаним драйвером знайдений, то йому динамічно виділяється потрібна пам’ять і відбувається його завантаження.

Якщо пам’яті немає в достатній кількості, функція завершується аварійно з кодом “-5”. Після ж нормального розміщення драйвера в пам’яті, функція initgraph() організує внутрішній графічний буфер, динамічно запитує блок ОП розміром 4 Кбайт (за замовченням). Потім відбувається ініціалізація графічних змінних і адаптер дисплея переводиться в графічний режим. При цьому екран очищується і покажчик поточної позиції встановлюється в лівий верхній кут. Якщо BGI-файли знаходяться в поточній директорії, то в якості третього параметру функції initgraph() можна задати порожній рядок

initgraph (&gd, &gm, “ ”);

  1. Обробка помилкових ситуацій.

Функція graphresult();

повертає код завершення останньої використаної графічної функції.

Для різних типів помилок передбачені свої коди завершення:

Константи

Код помилки

Повідомлення

grOK

0

Немає помилки

grNoInitGraph

-1

Графіка неініційована

grNoLoadMem

-5

Дефіцит пам’яті для завантаження драйвера

…………..

.............

.........

grFotFound

-8

Файл шрифта не знайдений

Є можливість роздрукувати повідомлення, відповідне значенню коду помилки. Для цього використовується функція

grapherrormsg( код помилки );

Вона повертає покажчик на рядок, який містить опис коду завершення, переданого в якості аргументу.

Звичайна початкова послідовність дій при роботі з графікою виглядає таким чином:

# include <stdio.h>

# include <stdlib.h>

#include <graphics.h>

void main()

{

int gd, gm, error;

detectgraph( &gd, &gm );

initgraph( &gd, &gm, “ “ );

error = graphresult ( );

if ( error !=grOk )

{

puts( “помилка графіки ” );

puts( “ grapherrormsg( error ) );

exit (1);

}

… //Тіло програми

closegraph ( );

exit (0);

}

  1. Переключення режимів.

Для тимчасового переходу в текстовий режим дисплейного адаптера в графічній бібліотеці передбачена функція

restorecrtmode ();

Вона відновлює той текстовий режим, який був перед зверненням до функції initgraph( ); текстовий зміст екрана не зберігається, тому що його знищила функція initgraph ( ). Повернутись до графічного режиму можна за допомогою функції

setgraphmode( gm ) ;

Аргументом її є цілочисельний номер режиму, допустимий для даного драйвера. Можливо відновити колишній графічний режим, якщо його номер був завчасно визначений з допомогою функції

getgraphmode ( );і збережений в програмі.

Отримати максимальне значення номера графічного режиму можливо за допомогою функції

getmaxmode ( );

Після закінчення роботи з графічною системою необхідно звільнити пам’ять, виділену для потреби графіки, почистити буфер відеоадаптера, відновити попередній текстовий режим. Всі ці дії виконує функція

closegraph ( );

  1. Установка кольорів, шрифтів, стилів ліній і стилів забарвлення.

Відеорежимом називається набір параметрів, які підтримує відеокарта. Зображення формується із точок, які називаються пікселями (pixel). Самим відомим атрибутом відеорежима є роздільна здатність екрана. Наприклад 640480. Початок системи координат знаходиться в лівому верхньому куті екрана. Тому всі зображені об’єкти будуть мати додатні координати як по x, так і по y.

Відеорежими розрізняються по глибині пікселів(pixel depth). Цей параметр визначає кількість різних значень, приймаємих окремим пікселем, і, відповідно, кількість відображених кольорів. Наприклад в відеорежимі з глибиною 8 біт кожний піксель може мати один із 256 різних кольорів (). В режимах з 16-ти бітною глибиною пікселів підтримується зображення до 65 536 кольорів. Глибина пікселів звичайно дорівнює 4, 8, 16, 24 або 32 біти. Ми з вами будемо працювати в одному із самих простих графічних режимів -640480 з глибиною кольору 4 біта. Тобто в нашому розпорядженні буде 16 кольорів. Такий режим називаєтьсяVGA.

Для вказання кольору в програмі можна користуватись константами переліковного типу або відповідними їм цілими значеннями.

Стандартна кольорова палітра така:

Black 0 чорний

Blue 1 синій

Green 2 зелений

Gray 3 сірий

Red 4 червоний

Magenta 5 малиновий

Brown 6 коричневий

Lightgray 7 світло-сірий

Darkgray 8 темно-сірий

Lightblue 9 світло-синій

Lightgreen 10 світло-зелений

Lightgyan 11 світло-бірюзовий

Lightred 12 світло-красний

Lightmagenta 13 світло-малиновий

Yellow 14 жовтий

White 15 білий

Кольором фону керують за допомогою функції

setbkgcolor (колір);

Соседние файлы в папке lexzii_08