OT_METOD_KP_ONOEOT
.pdfТаким чином, відображена лінія буде мати заданий колір. Якщо Mode=1, то код кольору пікселів, які утворюють лінію, вираховується як результат операції виключного ЧИ над кодом поточного кольору і кодом кольору пікселю на екрані, через які проходить лінія.
Побудова прямокутників. Для побудови прямокутників і паралелограмів використовуються декілька процедур. Перша з них – процедура побудови прямокутника на площині:
Rectangle (X1, Y1, X2, Y2: INTEGER);
де X1, Y1 – координати лівого верхнього кута, X2, Y2 – координати правого нижнього кута прямокутника. Це дуже корисна процедура, з її допомогою можна легко побудувати діаграму для візуального аналізу даних. Область всередині прямокутника не замальовується і співпадає з кольором фону.
Більш ефектні прямокутники можна будувати за допомогою процедури
Bar (X1, Y1, X2, Y2: INTEGER);
Вона малює прямокутник, внутрішня область якого залита по поточному шаблону. Дана процедура звичайно використовується в діловій графіці для побудови стовпових діаграм. Параметри (X1,Y1),(X2,Y2) – координати верхнього лівого і правого нижнього кутів прямокутника. Іще більше наглядне представлення інформації під час малюванні діаграм дозволяє отримати процедура
Bar3D (X1, Y1, X2, Y2: INTEGER; D3: WORD; Top: BOOLEAN);
За її допомогою можна відобразити паралелепіпед, „лицева сторона” якого заливається по поточному шаблону, а глибина задається в пікселях параметром D3. Параметр Top задає режим верхньої площини: True – відображати, False – не відображати. Цей параметр потрібен для малювання
110
стовпців, розташованих „один на одному”. В модулі Graph визначені дві константи для цієї процедури:
CONST
TopOn = TRUE; {верхня площина відображається}
TopOff = FALSE; {верхня площина не відображається}
Побудова многокутників. Многокутники можна малювати найрізноманітнішими способами, наприклад за допомогою процедур Line і LineTo. В Turbo Pascal знаходиться процедура DrawPoly, яка дозволяє будувати довільні многокутники за допомогою ліній поточного кольору, стилю і товщини. Вона має наступний синтаксис:
DrawPoly (NumPoint: WORD; VAR PolyPoint);
DrawPoly дозволяє відображати на екрані дисплея будь-яку ламану, задану сукупністю координат деякої множини точок. Це може бути як складна геометрична фігура, так і графік математичної функції, заданої в табличному вигляді. Параметр NumPoint – це кількість точок ламаної. В якості параметра PolyPoint задається змінна, тип її може бути довільним.
Побудова дуг, еліпсів і кіл. Алгоритм побудови кривих досить складний для самостійної реалізації, тому практично у всіх випадках слід користуватися готовими процедурами модуля Graph.
Для зображення кола використовується процедура
Circle (X, Y: INTEGER; Radius: WORD);
тут (X,Y) – координати центру кола, Radius – його радіус. Результатом роботи буде коло, якщо коефіцієнт стиску зображення відповідає встановленому BGI-драйвером для поточного графічного режиму. В протилежному випадку на екрані з’явиться еліпс, витягнутий по вертикалі (коли коефіцієнт стиску більший прийнятого по замовчуванню) чи по горизонталі (коли коефіцієнт стиску менший прийнятого по замовчуванню).
111
В ряді випадків, особливо для імітації об’ємних фігур, використовуються дуги. Їх можна накреслити за допомогою процедури
Arc (X, Y: INTEGER; StAngle; EndAngle; Radius: WORD);
де (X,Y) – центр кола дуги, StAngle і EndAngle – початковий і кінцевий кути, які відраховуються від горизонтальної осі проти часової стрілки, Radius
– радіус. Очевидно, що якщо StAngle=0 і EndAngle=359, то накреслиться повне коло.
Для побудови еліптичних дуг призначена процедура
Ellipse (X, Y: INTEGER; StAngle, EndAngle: WORD; XR, YR: WORD);
де (X,Y) – центр еліпса в дисплейних координатах, XR і YR – горизонтальна і вертикальна осі. Дуга еліпса накреслюється поточним кольором від початкового кута StAngle до кінцевого кута EndAngle, так само як і в процедурі Arc.
Робота з текстом
Відображення тексту в графічному режимі має ряд відмінностей від текстового режиму. Основна відмінність полягає в тому, що в графічному режимі всі дії проходять тільки з рядковими константами і змінними. Всі числова інформація повинна попередньо перетворюватися в символьну. Друга відмінність – в можливості використання різних шрифтів.
Зображення на екрані звичайно супроводжується пояснюваним текстом. В графічних режимах для цього використовуються процедури
OutText і OutTextXY. Процедура
OutText (TextString: STRING);
Виводить на екран рядок тексту, починаючи з початкового положення СР. Очевидний недолік процедури а тому, що не можна вказати довільну точку початку виводу. Цей недолік можна обійти за допомогою MoveTo, але краще скористатися процедурою
OutTextXY (X, Y, Text);
112
де X, Y – координати точки початку виводу тексту, Text – константа чи змінна типу STRING.
Звичайно для недосвідчених користувачів відображення числової інформації на екрані представляє деякі трудності, так як в модулі Graph немає призначених для цього процедур. З цього положення можна вийти наступним чином: спочатку перетворити число в рядок за допомогою процедури Str, а потім за допомогою операцій конкатенації (+)об’єднати її з відображеною функцією OutTextXY рядком.
Управління параметрами зображення
Встановлення кольору. Для різних типів адаптерів кількість кольорів, одночасно відображених на екрані в графічному режимі, може бути різною. Але для всіх BGI-драйверів вона обмежена діапазоном цілочислових значень від 0 до 15.
Для того. Щоб взнати максимальний номер кольору, відтворюваного даним адаптером в поточному графічному режимі, слід використовувати функцію
GetMaxColor: WORD;
Для встановлення кольору і фону в мові Turbo Pascal застосовуються процедури SetColor і SetBkColor. Процедура
SetColor (Color: WORD);
слугує для задання кольору, який буде використовуватися процедурами графічного виводу. Номер кольору вказується параметром Color. По замовчуванню для зображення використовується колір з максимальним номером, а для фону – з мінімальним. Якщо в якості Color вказаний недоступний номер кольору, поточний колір не змінюється. Процедура
SetBkColor (Color: WORD);
встановлює новий колір фону, який визначається значенням Color.
113
Отримати значення поточних установок кольору можна за допомогою двох спеціальних функцій. Функція
GetColor: WORD;
повертає значення поточного кольору зображення, а функція
GetBkColor: WORD;
поточний колір фону.
Встановлення палітри. Палітрою називається максимальна набір кольорів, які підтримує BGI-драйвер. Вона включає 16 кольорів, пронумерованих від 0 до 15, які використовуються по замовчуванню в режимі 320х200 для EGA як в текстовому, так і в графічному режимах.
Отримати інформацію про поточну палітру можна за допомогою процедури
GetDefaultPalette (VAR Palette: PaletteType);
де Palette – змінна типу PaletteType.
Контрольні питання
1.Функціональні групи функцій і процедур модуля GRAPH.
2.Відкриття і закриття графічного режиму.
3.Як відбувається очищення екрана, управління графічними режимами і управління курсором?
4.Які функції використовуються для малювання графічних примітивів і фігур?
5.Як відбувається управління кольорами і шаблонами заповнення?
6.Бітові операції.
7.Що таке графічне вікно?
8.Управління виведенням тексту.
114