МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
ДЕРЖАВНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
УПРАВЛІННЯ КОЛЬОРАМИ ТА ПАЛІТРОЮ ГРАФІЧНИХ ЗОБРАЖЕНЬ
ІНСТРУКЦІЯ
До лабораторної роботи № 3
з курсу «Комп’ютерна графіка»
Затверджено
на засiданнi кафедри
"Автоматика та телемеханiка"
Протокол N 11 вiд 17.02.2000 p.
Львів 2000
Мета роботи - вивчити процедури та функції для управління кольорами та па-літрою графічних зображень; навчитися складати програми на алгоритмічній мові Турбо-Паскаль для побудови різноманітних кольорових зображень.
1. КОРОТКІ ТЕОРЕТИЧНІ ДАНІ
В залежності від типу відеомонітора на його екрані можуть відтворюватися різні кольори. Гама кольорів, що може знаходитися одночасно на екрані називається па-літрою. Кількість кольорів в палітрі називається її розміром.
Розглянемо процедури та функції для управління кольорами та палітрою гра-фічних зображень, які знаходяться в модулі GRAPH.TPU мови Турбо-Паскаль (ці про-цедури та функції можуть використовуватися лише після ініціалізації графічного ре-жиму роботи).
Процедура SETCOLOR встановлює поточний колір для виводу ліній та символів; формат звертання
SETCOLOR ( <колір> ) ,
де <колір> - вираз типу word, що задає поточний колір.
В модулі GRAPH є такі константи для задання кольору:
const
Black = 0; {чорний}
Blue = 1; {синій}
Green = 2; {зелений}
Cyan = 3; {блакитний}
Red = 4; {червоний}
Magenta = 5; {фіолетовий}
Brown = 6; {коричневий}
LightGray = 7; {світло-сірий}
DarkGray = 8; {темно-сірий}
LightBlue = 9; {яскраво-синій}
LightGreen = 10; {яскраво-зелений}
LightCyan = 11; {яскраво-блакитний}
LightRed = 12; {рожевий}
LightMagenta = 13; {малиновий}
Yellow = 14; {жовтий}
White = 15; {білий}
Функція GETCOLOR повертає значення типу word, в якому є код поточного кольору. Звертання
GETCOLOR.
Функція GETMAXCOLOR повертає значення типу word, в якому знаходиться максимально доступний код кольору, який можна використати для звертання до SETCOLOR. Звертання
GETMAXCOLOR.
Процедура SETBKCOLOR встановлює колір фону; формат звертання
SETBKCOLOR ( <колір> ),
де <колір> - вираз типу word, що задає колір фону.
Функція GETBKCOLOR повертає значення типу word, де знаходиться поточний колір фону. Звертання
GETBKCOLOR.
Процедура SETPALETTE замінює один із кольорів палітри на новий колір; фор-мат звертання
SETPALETTE ( N,<колір> ),
де N - вираз типу word, що вказує на номер кольору в палітрі;
<колір> - вираз типу shortint, який визначає номер кольору, що знову встанов-люється.
Процедура GETPALETTE повертає розмір і кольори встановленої палітри; фор-мат звертання
GETPALETTE ( <палітра> ),
де <палітра> - змінна типу PALETTETYPE, що повертає розмір та кольори палітри.
В модулі GRAPH.TPU існують константа
const
MaxColors = 15;
і тип
type
PaletteType = record
size :word; {кількість кольорів в палітрі}
colors:array [1..MaxColors] of shortint{коди кольорів, що входять в палітру}
end;
Процедура SETALLPALETTE змінює одночасно кілька кольорів палітри; формат звертання
SETALLPALETTE ( <вст.кольори> ),
де <вст.кольори> - кольори, що встановлюються.
Функція GETPALLETTESIZE повертає значення типу integer, що вказує на розмір палітри (максимальна кількість доступних кольорів). Звертання
GETPALLETTESIZE.
Процедура SETFILLSTYLE встановлює стиль (тип і колір) штрихування; формат звертання
SETFILLSTYLE (<штрихування>,<колір>),
де <штрихування> - змінна типу word, що визначає тип штрихування;
<колір> - змінна типу word; колір штрихування.
В модулі GRAPH.TPU є такі константи для типів штрихування:
const
EmptyFill = 0; {штрихування фоном (візерунок відсутній)}
SolidFill = 1; {суцільне штрихування}
LineFill = 2; {штрихування лініями}
LtSlashFill = 3; {штрихування ///////}
SlashFill = 4; {штрихування грубими ///////}
BkSlashFill = 5; {штрихування \\\\\\\}
LtBkSlashFill = 6; {штрихування грубими \\\\\\\}
HatchFill = 7; {штрихування +++++++}
XHatchFill = 8; {штрихування xxxxxxx}
InterleaveFill = 9; {штрихування прямокутними клітинками}
WideDotFill = 10; {штрихування розрідженими точками}
CloseDotFill = 11; {штрихування густими точками}
UserFill = 12; {штрихування визначається користувачем}
Якщо параметр <штрихування> має значення 12 (UserFill), то малюнок візерунку визначається користувачем за допомогою звертання до процедури SETFILLPATTERN.
Процедура SETFILLPATTERN встановлює зразок малюнка та колір штрихування; формат звертання
SETFILLPATTERN (<зразок>,<колір>),
де <зразок> - вираз типу FILLPATTERNTYPE, що встановлює зразок малюнка для <штрихування> = UserFill в процедурі SETFILLSTYLE;
<колір> - змінна типу word; колір штрихування.
Зразок малюнка задається у вигляді матриці з 8x8 пікселів і може бути представ-лений масивом з 8 байт типу:
type
FillPatternType = array [1..8] of byte;
Кожний розряд довільного з цих байтів керує висвітленням пікселя на екрані, причому перший байт визначає 8 пікселів першої стрічки на екрані, другий байт - 8 пікселів другої стрічки і т.д.
Процедура GETFILLPATTERN повертає зразок замальовування, встановлений раніше процедурою SETFILLPATTERN; формат звертання
GETFILLPATTERN (<зразок>),
де <зразок> - змінна типу FILLPATTERNTYPE, що встановлює зразок замальовування.
Процедура GETFILLSETTINGS повертає поточний стиль штрихування; формат звертання
GETFILLSETTINGS (<стиль>) ,
де <стиль> - змінна типу FILLSETTINGSTYPE, через яку повертається поточний стиль штрихування.
В модулі GRAPH.TPU є такий тип:
type
FillSettingsType = record
Pattern : word; {зразок}
Color : word; {колір}
end;
Процедура FLOODFILL штрихує довільну замкнену фігуру; формат звертання
FLOODFILL (X,Y,<колір межі>),
де X, Y - вирази типу integer; координати будь-якої точки всередині замкненої фігури;
<колір межі> - вираз типу word, колір лінії, що визначає межу.
Процедура штрихує замкнену фігуру штрихуванням і кольором, які встановлені процедурою SETFILLSTYLE. Якщо фігура не замкнена, то штрихування заповнить весь екран.
Процедура BAR штрихує прямокутну область екрану. Звертання
BAR (X1,Y1,X2,Y2),
де X1, Y1 та X2, Y2 - вирази типу integer, які визначають координати лівого верхнього та правого нижнього кутів прямокутника, що замальовується.
Процедура штрихує (не обводить) прямокутник штрихуванням і кольором, встановленими процедурою SETFILLSTYLE.
Процедура FILLPOLY обводить лінією і штрихує замкнений багатокутник; формат звертання
FILLPOLY (N,<координати>),
де N - вираз типу word, що задає кількість вершин замкненого багатокутника;
<координати> - вираз типу POINTTYPE, в якому є координати вершин.
Координати вершин задаються парою значень типу word: перше визначає горизонтальну, друге - вертикальну координату. В модулі GRAPH.TPU визначений та-кий тип:
type
PointType = record
x,y: word
end;
Стиль і колір лінії контура задається процедурами SETLINESTYLE і SETCOLOR, стиль і колір штрихування - процедурою SETFILLSTYLE.
Процедура FILLELLIPSE обводить лінією і штрихує еліпс; формат звертання
FILLELLIPSE (X,Y,<поч.кут>,<кінц.кут>,RX,RY),
де X, Y - вирази типу integer, що задають координати центра;
<поч.кут> і <кінц.кут>, RX, RY - вирази типу word, що визначають, відповідно, початковий і кінцевий кути, горизонтальний та вертикальний радіуси еліпса в піксе-лях.
Процедура SECTOR креслить та штрихує сектор еліпса; формат звертання
SECTOR (X,Y,<поч.кут>,<кінц.кут>,RX,RY).
Параметри звертання такі самі, як і в процедури FILLELLIPSE.
Стиль і колір лінії сектора задається процедурами SETLINESTYLE і SETCOLOR, стиль і колір штрихування - процедурою SETFILLSTYLE.
Процедура PIESLICE креслить та штрихує сектор кола; формат звертання
PIESLICE (X,Y,<поч.кут>,<кінц.кут>,R),
де R - вираз типу word, що визначає радіус кола
Сектор обводиться лінією, стиль і колір якої задані процедурами SETLINESTYLE і SETCOLOR, стиль і колір штрихування - процедурою SETFILLSTYLE.
2. ЗАВДАННЯ
2.1. Домашня пiдготовка до роботи
Навчитися ініціалізувати графічний режим роботи відеоадаптера з різною кількістю кольорів та певними типами палітри на алгоритмічній мові Турбо-Паскаль.
Вивчити основні графічні процедури і функції алгоритмічної мови Турбо-Паскаль для побудови кольорових графічних зображень.
Написати програму на алгоритмічній мові Турбо-Паскаль, яка виводить на екран розмальоване графічне зображення. Варіанти завдань брати за вказівкою викладача з таблиці 1.
Таблиця 1.
N% п/п
Варіанти завдань
N% п/п
Варіанти завдань
1.
2
3.
4.
5.
6.
7.
8.
N% п/п
Варіанти завдань
N% п/п
Варіанти завдань
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
2.2. Робота в лабораторiї
Ввести в комп'ютер програму, написану на мові Турбо-Паскаль згідно з отри-маним завданням.
Здійснити відладку введеної програми, виправивши виявлені компілятором помилки.
Виконати програму. Текст відлагодженої програми та отримані результати оформити в звіт по лабораторній роботі.
3. ЗМIСТ ЗВIТУ
1. Повний текст завдання.
Блок-схему алгоритму програми.
Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі, та їх пояснення.
4. Остаточно відлагоджений текст програми згідно з отриманим завданням.
5. Результати виконання програми.
4. КОНТРОЛЬНI ПИТАННЯ
Скільки кольорів і які саме існують для відповідних графічних режимів в мові Турбо-Паскаль ?
Як встановити певний колір і тип штрихування для заповнення довільної замкненої області за допомогою процедур та функцій модуля GRAPH.TPU мо-ви Турбо-Паскаль ?
Які стандартні процедури та функції мови Турбо-Паскаль для креслення зама-льованих та геометричних фігур вам відомі?
СПИСОК ЛIТЕРАТУРИ
Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Пас-каль.- 2-е изд. - М.: Изд-во МГТУ, 1992.
Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка.- М.: Финансы и статистика, 1982.
Сердюченко В.Я. Розробка алгоритмів та програмування на мові Turbo Pascal: Навчальний посібник для техн. вузів - Х.: ВКП "Парітет"ЛТД, 1995.
4. Гроного П. Программирование на языке Паскаль. - М.: Мир, 1982.