Програмування у СІ
Портал Рефератів
Рекомендуємо
Кафедра: Автоматика та Інформаційні Технології
ПРОГРАМУВАННЯ В СІРОБОТА У ГРАФІЧНОМУ РЕЖИМІ
1. ОГЛЯД ГРАФІЧНИХ ФУНКЦІЙ3
1.1. Загальні відомості
1.2. Ініціалізація графічного драйвера та режиму
1.3. Робота з растром точок
1.4. Керування кольором
1.6. Графічні примітиви
1.7. Виведення графічного тексту
2. ПРИЙОМИ ПРОГРАМУВАННЯ ГРАФІЧНОГО РЕЖИМУ
2.1. Підключення графічної бібліотеки
2.2. Ініціалізація графічного режиму
2.3. Увімкнення драйвера та шрифтів у виконуваний файл
2.4. Малювання геометричних фігур
2.5. Виділення пам'яті під великі одновимірні масиви
2.6. Виведення числової інформації
2.7. Затримка екрану
2.8. Реакція програми на натискання конкретної кнопки
2.9. Організація введення числової інформації
2.10.Перевірка виходу аргументу функції з ОДЗ
2.11.Графічна та математична системи координат
2.13.Малювання зображень у bmp-форматі
2.14.Робота з мишею
3. ЗАВДАННЯ ДЛЯ ЛАБОРАТОРНОЇ РОБОТИ
3.1. Зоряне небо
3.3. Малювання графіка функції
3.4. Обертання зірки
1.ОГЛЯД ГРАФІЧНИХ ФУНКЦІЙ
1.1. Загальні відомості
Графічний режим персональних комп'ютерів більш привабливим, ніж текстовий режим. Серйозні програмні програми, написані під DOS, зазвичай мають графічну оболонку.
Графічне відображення на екрані монітора є результатом виконання наступних дій:
У дисплейних адаптерах із монохромним монітором значення атрибутукерує інтенсивністю одного електронного променя, тобто яскравістю точки на екрані, а з кольоровим монітором - інтенсивністю трьох променів, що становлять колірні компоненти зображення пікселя. Як правило, використовується поділ кольору на RGB-компоненти – червону, зелену та синю. Якщо кожна компонента має N градацій, то загальна кількість колірних відтінків для такого адаптера становить N_colors=N3, при цьому число колірних відтінків включаються чорний, білий і градації сірого.
1.2.Ініціалізація графічного драйвера та режиму
Графічна система складається з ядра та великої бібліотеки графічних функцій graphics.lib (її потрібно підключати під час компонування програмного модуля). При створенні програми, що звертається до графічних функцій, до тексту програми потрібно включити файл, що містить прототипи функцій, константи, типи даних і різні типи:
Графічний інтерфейс фірми Borland International (BGI – Borland Graphics Interface) складається з двох компонентів: постійного ядра графічної системи та набору графічних драйверів. Ядро графічної системи приймає всі запити прикладної програми виконання графічних функцій. Воно не залежить від типу підключеного дисплейного адаптера. Апаратно-залежною частиною є графічні драйвери, які здійснюють інтерфейс між ядром системи та конкретним дисплейним адаптером.
Графічні драйвери містяться в окремих файлах із розширенням .bgi. Кожен файл містить бінарний образ (binary image) драйвера для одного або кількох близьких типів адаптерів. Для використання у програмі за кожним драйвером закріплено постійний номер, якому відповідає макропідстановка, наприклад, EGA або VGA.
Графічні драйвери підтримують багато (але не всіх) графічних режимів.дисплейних адаптерів, передбачених системою BIOS. Для вказівки в програмах графічних режимів, як і для драйверів, передбачені макропідстановки (EGALO, EGAHI, VGAHI та інші).
Перш ніж звертатися до графічних функцій, програма повинна вибрати графічний драйвер, який відповідає дисплейному адаптеру, та підключити його до ядра графічної системи. Графічна бібліотека містить функцію detectgraph, призначену для тестування апаратури та автоматичного вибору відповідного драйвера та графічного режиму. Прототип цієї функції -
void far detectgraph (int far * graph_driver, int far * graph_mode);
Ця функція через свої аргументи повертає номер графічного драйвера та номер графічного режиму, що забезпечує максимальну роздільну здатність адаптера. Повернені цією функцією значення надалі можуть передаватися функції ініціалізації графічної системи initgraph (але можна ініціалізації вибрати інший режим, підтримуваний даним драйвером).
Якщо при тестуванні апаратури дисплейного адаптера не виявлено, то функція graphresult повертає значення -2. Функція графрезультату повертає поточне значення внутрішньої змінної, що містить код завершення роботи графічних функцій. Її прототип
int far graphresult(void);
Негативне значення коду завершення, встановлене будь-якою графічною функцією, зберігається у внутрішній змінній до виклику функції graphresult, після чого воно обнулюється.
Є можливість отримати рядок, який містить опис будь-якого з допустимих кодів завершення графічних функцій. Навіщо існує функція grapherrormsg. Прототип функції -
char far *grapherrormsg(int error_code);
Якщо цією функцією передати значення, що повертається функцієюГрафрезультату можна отримати повідомлення про код завершення останньої графічної функції.
Графічний драйвер повинен бути поміщений в оперативну пам'ять перед тим, як відбудеться звернення до якоїсь функції графічної бібліотеки.
Найпростішим способом включення драйвера в програму є його автоматичне завантаження за допомогою функції initgraph з прототипом
void initgraph(int far *graph_driver,int far *graph_mode,char far *path_to_bgi);
Аргументами цієї функції є покажчики на змінні, що містять номер графічного драйвера, номер графічного режиму і шлях до файлу драйвера BGI. Функція initgraph шукає на диску BGI-файл, що містить необхідний драйвер, завантажує файл повністю в пам'ять, що динамічно виділяється, і налаштовує ядро системи на роботу з цим драйвером. Якщо ініціалізація пройшла успішно, функція graphresult поверне нульове значення GR_Ok, інакше - одне з негативних значень, визначених у файлі graphics.h.
void far closegraph(void)
Приклад автоматичного завантаження драйвера та ініціалізації системи:
detectgraph(&gd,&gm); /* визначення номера драйвера та режиму */
err=graphresult(); /* отримання коду завершення */
err=graphresult(); /* отримання коду завершення */
closegraph(); /* завершення роботи системи */
Головним недоліком автоматичного завантаження драйвера за допомогою функції initgraph є те, що вона звертається до диска для читання файлу BGI під час виконання програми. Альтернативою автоматичного завантаження графічного драйвера є його статичне включення на етапі побудови програми. Попередньо бінарний файл драйвера .bgi має бути перетворений на звичайний об'єктний файл типу .obj спеціальною утилітою bgiobj.exe. До речі,Ця утиліта використовується також для конвертування chr-файлів з графічними шрифтами в об'єктні модулі. Отримані об'єктні модулі підключаються на етапі компонування.
У програмі, як ініціалізувати графічну систему, необхідно потрібні драйвери зареєструвати, т. е. повідомити графічної системі, що це драйвер перебуває у оперативної пам'яті. Для цього існує функція registerbgidriver, якій потрібно повідомити розташування драйвера:
int registerbgidriver(void (*driver)(void));
Аргумент функції - ім'я покажчика на місце в пам'яті, що містить драйвер, що реєструється. Імена подібних покажчиків вже визначені в об'єктних файлах, створених утилітою bgiobj.exe. Нижче наведені прототипи функцій, імена яких потрібно використовувати для стандартних драйверів:
Якщо реєстрація пройшла успішно, функція графрезультату поверне нульове значення, інакше -4. Після реєстрації драйвера можна ініціалізувати графічну систему за допомогою функції initfgraph, її третій параметр не використовується (передається нульовий рядок “”).
Приклад статичного завантаження драйвера та ініціалізації системи: