
- •Лекція 10. Графіка в Сі
- •Ініціювання графічної системи. Обробка помилок
- •Поточне значення кольору лінії малюнка встановлюється функцією
- •Допустимі значення для параметра шрифт
- •Робота з вікнами і координатами.
- •Графічні примітиви
- •Зафарбований еліпс з контуром можна отримати, виконавши функцію
- •13. Зафарбування прямокутника виконує функція
Лекція 10. Графіка в Сі
Для організації графіки фірми BORLAND випустила ряд універсальних графічних драйверів – програм, які забезпечують взаємодію програмної та апаратної частини комп’ютера. Графічні каталоги знаходяться в каталозі BGI і мають таке ж розширення, а саме *.bgi
(BGI
– Borland Graphics Interface).
Ім’я
файла звичайно відображає, для роботи
з яким саме графічним режимом він
призначається. В нашому випадку це файл
egavga.bgi.
Крім
шаблону в програмі, потрібно в меню
Options
Linker
Libraries…
поставити хрестик в рядку Graphics
library,
якщо це ще не зробили до вас.
Дисплей персонального комп’ютера може працювати в одному із двох режимів: текстовому і графічному. Розглянемо роботу в графічному режимі. Треба нагадати, що графічний драйвер мови Сі подібний графічному драйверу мови Паскаль і за деяким винятком, використовуються такі ж графічні функції.
Ініціювання графічної системи. Обробка помилок
Переключення режимів.
Вибір драйвера і графічного режиму виконує функція detectgraph (&gd, &gm);
Відбувається тестування апаратури відеоадаптера, автоматичний вибір необхідного драйвера і графічного режиму. Цілочисельні змінні, покажчики на які передаються функції в якості аргументів, повертають номер драйвера і номер режиму.
Завантаження драйвера, ініціалізацію графічної системи виконує функція
initgraph (&gd, &gm, “шлях до BGI-файлу”);
Значеннями змінних gd, gm повинні бути номер потрібного драйвера і номер бажаного графічного режиму. Якщо файл з вказаним драйвером знайдений, то йому динамічно виділяється потрібна пам’ять і відбувається його завантаження.
Якщо пам’яті немає в достатній кількості, функція завершується аварійно з кодом “-5”. Після ж нормального розміщення драйвера в пам’яті, функція initgraph() організує внутрішній графічний буфер, динамічно запитує блок ОП розміром 4 Кбайт (за замовченням). Потім відбувається ініціалізація графічних змінних і адаптер дисплея переводиться в графічний режим. При цьому екран очищується і покажчик поточної позиції встановлюється в лівий верхній кут. Якщо BGI-файли знаходяться в поточній директорії, то в якості третього параметру функції initgraph() можна задати порожній рядок
initgraph (&gd, &gm, “ ”);
Обробка помилкових ситуацій.
Функція 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);
}
Переключення режимів.
Для тимчасового переходу в текстовий режим дисплейного адаптера в графічній бібліотеці передбачена функція
restorecrtmode ();
Вона відновлює той текстовий режим, який був перед зверненням до функції initgraph( ); текстовий зміст екрана не зберігається, тому що його знищила функція initgraph ( ). Повернутись до графічного режиму можна за допомогою функції
setgraphmode( gm ) ;
Аргументом її є цілочисельний номер режиму, допустимий для даного драйвера. Можливо відновити колишній графічний режим, якщо його номер був завчасно визначений з допомогою функції
getgraphmode ( );і збережений в програмі.
Отримати максимальне значення номера графічного режиму можливо за допомогою функції
getmaxmode ( );
Після закінчення роботи з графічною системою необхідно звільнити пам’ять, виділену для потреби графіки, почистити буфер відеоадаптера, відновити попередній текстовий режим. Всі ці дії виконує функція
closegraph ( );
Установка кольорів, шрифтів, стилів ліній і стилів забарвлення.
Відеорежимом
називається набір параметрів, які
підтримує відеокарта. Зображення
формується із точок, які називаються
пікселями
(pixel).
Самим
відомим атрибутом відеорежима є роздільна
здатність екрана. Наприклад 640480.
Початок системи координат знаходиться
в лівому верхньому куті екрана. Тому
всі зображені об’єкти
будуть мати додатні координати як по
x,
так і по y.
Відеорежими
розрізняються по глибині пікселів(pixel
depth).
Цей параметр визначає кількість різних
значень, приймаємих окремим пікселем,
і, відповідно, кількість відображених
кольорів. Наприклад в відеорежимі з
глибиною 8 біт кожний піксель може мати
один із 256 різних кольорів ().
В режимах з 16-ти бітною глибиною пікселів
підтримується зображення до 65 536
кольорів. Глибина пікселів звичайно
дорівнює 4, 8, 16, 24 або 32 біти. Ми з вами
будемо працювати в одному із самих
простих графічних режимів -640
480
з глибиною кольору 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 (колір);