Тема уроку: "Опис графічних вказівок мовою програмування"
Мета уроку: дати поняття графічного режиму роботи монітору, ініціалізації графічного режиму, основних процедур та функцій для побудови графічних зображень.
Тип уроку: Лекційний.
Теоретичний матеріал:
Як Вам вже відомо, будь-який монітор ПЕОМ може працювати в одному з двох режимів:
Перший з них дозволяє виводити на екран будь-який символ ASCII-таблиці (дивись
вище) у визначене знакомісце екрану, що знаходиться на перетині рядка та стовпчика.
Кількість знакомісць залежить від текстового режиму, але найчастіше дорівнює
25 рядкам по 80 колонок в кожному. В цьому режимі можна керувати кольором та
яскравістю символів, забезпечуючи за бажанням їх миготіння, та кольором тла.
В графічному режимі будь-яке зображення отримується як сукупність різнокольорових
точок - пікселів. Кількість елементів зображення теж задається відповідним режимом,
але стандартно дорівнює 640 на 480 відповідно по горизонталі та вертикалі.
Для роботи в графічному режимі в Паскалі використовується модуль Graph,
який складається з більш ніж 90 графічних процедур і функцій широкого профілю.
Усі стандартні засоби модуля Graph стають доступними після його підключення
до програми в розділі Uses:
Uses Graph;
Зверніть увагу на те, що для того, щоб графічна бібліотека стала доступною,
необхідно прописати до неї шлях доступу в пункті меню Options ->Directories
->Unit directories оболонки Паскаль. За замовчанням цей шлях доступу
наступний: BP\UNITS відповідного диску.
Екран у графічному режимі може адресуватися за допомогою системи координат,
причому значення Х (номера стовпчика) збільшується зліва праворуч, а
значення Y (номера рядка) збільшується зверху до низу. За замовчанням
координати екрана мають такий вигляд:
(0,0) - лівий верхній кут;
(639,0) - правий верхній кут;
(319,239) - центр;
(0,479) - лівий нижній кут екрана;
(639,479) - правий нижній кут.
Графічна система підтримує поточний покажчик СР, який виконує ті ж функції,
що і курсор, але не виводиться на екран. Для переміщення покажчика використовуються
процедури МоvеTо, LineTo, InitGraph, LineRel, MoveRel
і деякі інші.
У графічному режимі можна виводити текст, причому є можливість масштабування
і вибору типу шрифту, виконання вирівнювання виведеного тексту тощо.
Наявні програми підтримують різні засоби малювання і заповнення фігур, зокрема,
крапку, лінії, окружності, еліпси, прямокутники, багатокутники.
Для всіх команд виведення можна встановити графічне вікно (прямокутну область
на екрані заданого розміру). Уся графічна інформація виводиться у поточне вікно,
поки не активізується інше. При установці віконного режиму всі графічні зображення,
якщо вони виходять за межі вікна, усікаються.
При виконанні графічної операції може виникнути помилка, код якої можна одержати
за допомогою функції GraphResult. Код помилки може приймати одне з наступних
значень:
0: | Помилки немає |
-1: | Режим BGI не встановлений |
-2: | Графічні апаратні засоби не виявлені |
-3: | Файл драйвера пристрою не знайдений |
-4: | Неправильно визначений файл драйвера пристрою |
-5: | Не вистачає пам'яті для завантаження драйвера |
-6: | Вихід за межі пам'яті при заповненні |
-7: | Вихід за межі пам'яті при заливанні |
-8: | Файл із шрифтом не знайдений |
-9: | Не вистачає пам'яті для завантаження шрифту |
-10: | Неправильний графічний режим для обраного драйвера. |
Для забезпечення переходу екрану монітора в графічний режим програма повинна
починатися викликом процедури InitGraph, що автоматично виявляє апаратні
засоби і завантажує відповідний графічний драйвер. Стандартний драйвер EGAVGA.BGI
розміщується у каталозі BP\BGI на відповідному диску. Якщо апаратні засоби не
виявлені або в процесі ініціалізації відбулася помилка, то на екран виводиться
повідомлення про помилку і програма зупиняється.
До основних функцій для роботи з графікою, за допомогою яких можна виконати
майже всі завдання шкільного курсу, відносяться наступні:
Arc(X,Y:integer; поч_кут, кін_кут, радіус:word) - програмна процедура, результатом роботи якої є дуга окружності з центром в точці (X,Y) і радіусом "радіус". Дуга креслиться від початкового кута ("поч_кут") до кінцевого кута ("кін_кут"). При цьому використовується поточний колір малювання.
Bar(X1,Y1,X2,Y2) - процедура малює зафарбований прямокутник, використовуючи колір зафарбування, що встановлюється процедурою SetFillStyle. Контур прямокутника креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor. Точки з координатами (X1,Y1) та (X2, Y2) задають дві діагонально протилежні вершини прямокутника.
Bar3D(Xl,Yl,X2,Y2:integer; глибина : word, вершина : boolean) - процедура малює зафарбований тривимірний паралелепіпед. Контур паралелепіпеда креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor, тип і колір зафарбування встановлюється за допомогою процедур SetFillStyle. "Глибина" являє собою число елементів зображення, що задають третій вимір тривимірного контуру. Якщо змінна, зазначена як параметр "вершина", приймає істинне значення (True), то для паралелепіпеда малюється тривимірна вершина, у протилежному випадку вершина не малюється (що дозволяє малювати кілька паралелепіпедів, розташованих один на одному).
Circle(X,Y:integer; радіус : word) - процедура малює окружність поточним кольором. Точка (X,Y) - центр окружності, а "радіус" - її радіус.
ClearDevise - процедура очищує поточний графічний екран і підготовлює його для виведення даних.
ClearViewport - процедура очищує поточне вікно.
CloseGraph - процедура припиняє роботу графічної системи (закриття графіки) і повертає монітор до текстового режиму.
DetectGraph(Var драйвер, peжим : integer) - процедура перевіряє наявність відповідних апаратних засобів і визначає, який графічний режим і драйвер варто використовувати.
Ellipse(X,Y:integer; поч_кут, кін_кут:word; paдХ,paдY:word) - процедура малює еліптичну дугу, використовуючи (X,Y), як точку центра і "радХ", "paдY" - як радіуси на горизонтальній і вертикальній осях. Дуга еліпса малюється від початкового кута (параметр "поч_кут") до кінцевого кута (параметр "кін_кут") поточним кольором.
FillEllipse(X,Y:integer;Xpaдіyс,Ypaдіус:word) - процедура вичерчує зафарбований еліпс, використовуючи точку з координатами (Х,Y), як центр, а "Храдіус" і "Yрадіус" - у якості радіусів на горизонтальній та вертикальній осях. Контур еліпса креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor, тип і колір зафарбування встановлюється за допомогою процедури SetFillStyle.
FloodFill(X,Y,границя:word) - процедура заповнює замкнену область, використовуючи поточний заповнювач, заданий процедурою SetFillStyle. Точка (X,Y) є внутрішньою точкою області, що зафарбовується. Заповнюється область, обмежена лінією, що має колір, визначений параметром "границя". Якщо точка (X,Y) знаходиться усередині замкненої області, то заповнюється внутрішня область. Якщо ця точка знаходиться поза замкненої області, то заповнюється її зовнішня частина (поле екрана, що не належить області).
GetBkColor : word - функція повертає поточне значення кольору тла (у діапазоні 0 - 15), встановлене процедурою SetBkColor.
GetColor : word - функція повертає поточне значення основного кольору малювання (у діапазоні 0 - 15), встановлене раніше процедурою SetColor.
GetMaxColor:word; - функція повертає найбільше значення кольору, яке можна передати процедурі SetColor.
GetMaxX:integer; - функція повертає максимальний для поточного графічного режиму і драйвера номер правого стовпчика (дозвіл по X).
GetMaxY:integer; - функція повертає максимальний для поточного графічного режиму і драйвера номер нижнього рядка екрана (дозвіл по Y).
GetPixel(X,Y:mteger): word; - функція повертає значення (колір) елемента зображення в точці (X, Y).
GetX: integer; - функція повертає Х-координату поточного покажчика СР.
GetY: integer; - функція повертає Y-координату поточного покажчика СР.
GraphResult : integer; - функція повертає код помилки (у діапазоні 0-10) для останньої графічної операції.
InitGraph (Var гр_драйв:integer; Var гр_режим:integer; nyть_дpaйв:string); - процедура ініціалізує графічну систему і переводить апаратну частину в графічний режим.
Line(X1, Y1, X2, Y2 : integer); - процедура вичерчує пряму лінію (товщина і тип якої встановлений процедурою SetLineStyle, колір - процедурою SetColor) із крапки (X1,Y1) у крапку (X2,Y2).
LineRel(Dx,Dy); - процедура вичерчує пряму лінію з точки поточного покажчика СР в точку, задану відносною відстанню (Dx, Dy) від поточного покажчика.
LineTo(X,Y : integer); - процедура малює пряму лінію з точки, у якій знаходиться поточний покажчик СР, у точку з координатами (X,Y).
MoveRel(Dx, Dy : integer); - процедура переміщує покажчик СР з поточної точки у точку, задану відносною відстанню (Dx, Dy).
MoveTo(X, Y : integer); - процедура переміщує поточний покажчик СР у точку з координатами (X,Y).
OutText (рядок : string); - процедура виводить текст "рядка" на монітор, починаючи з точки розташування покажчика СР.
OutTextXY(X, Y: integer; текст_рядок : string); - процедура виводить текст, що міститься у "текст_рядок", починаючи з точки, заданої координатами (X, Y). Якщо рядок занадто довгий і виходить за межі екрана чи поточної області перегляду, то він усікається.
PieSlice (Х, Y: integer; нач_кут, кін_кут R : word); - процедура вичерчує і заповнює поточним кольором сектор кола радіусом R. Точка (X,Y) - центр окружності, а сектор малюється від початкового до кінцевого кута. Тип і колір зафарбування попередньо задається процедурою SetFillStyle.
PutPixel(X, Y: integer; ел_зображ : word); - процедура зафарбовує точку з координатами (X,Y) у колір, що визначається параметром "ел_зображ".
Rectangle(Xl, Yl, Х2, Y2 : integer); - процедура вичерчує прямокутник, використовуючи поточний колір і тип лінії. (X1,Y1) та (X2,Y2) - координати діагонально протилежних вершин прямокутника.
Sector (X, У : integer; поч__кут, кін_кут, Х_Радіус, Y_Радіус : word); - процедура вичерчує і заповнює еліптичний сектор. (Х,Y) - центр окружності, "Х_Радіус", "Y_Радіус" - горизонтальний і вертикальний радіуси. Сектор креслиться від початкового кута "поч_кут" до кінцевого кута "кін_кут". Сектор малюється поточним кольором і зафарбовується з використанням зразка зафарбування і кольорів, заданих за допомогою процедури SetFillStyle.
SetActivePage (сторінка: word); - процедура встановлює для графічного виведення активну сторінку (їх всього чотири від 0 до 3). Графічне виведення буде тепер здійснюватися в цю сторінку.
SetBkColor (колір : word); - процедура встановлює поточний колір для тла.
SelColor(колір : word); - процедура встановлює поточний колір малювання .
SetFillStyle( зразок : word; колір :p word); - процедура встановлює зразок і колір зафарбування для всіх типів зафарбування, виконуваних процедурами Bar, Ваr3D, FillEllipse, FloodFill та PieSlice. Можна використовувати декілька типів зафарбування (наприклад, 1 - суцільне фарбування, 2 - штрихування лініями, 7 - штрихування символом "+", 11 - штрихування крапками тощо). За замовчуванням вибирається суцільне зафарбування білого кольору.
SetLineStyle(тип_рядка :word; зразок: word; товщина : word); - процедура встановлює поточну товщину і тип лінії.
SetTextJustify(ropиз, верт : word); - процедура встановлює значення вирівнювання тексту, що використовуються процедурами OutText і OutTextXY.
SetTextStyle (шрифт: word; направл: word; розм_символу: CharSize-турі); - процедура встановлює поточний шрифт, тип і коефіцієнт розміру символу.
SetViewport(XI, Y1, X1, X2 word, clip: boolean); - процедура встановлює для графічного поточного виведення чи перегляду вікно, де (X1,Y1) - верхній лівий кут області перегляду, (X2,Y2) - нижній правий кут. Процедура переміщує поточний покажчик у точку з координатами (0,0). Clip - булівська змінна.
SetVisualPage (сторінка : word); - процедура задає номер відображуваної графічної сторінки.
TextHeight(mekcm_рядок: string) : word; - функція повертає висоту рядка в елементах зображення.
TextWidth(текст_рядок : string) : word; - функція повертає ширину рядка в елементах зображення.
Домашнє завдання: