Розширений додатковий матеріал для вивчення теми "Комп'ютерна графіка Pascal"
Структура:
Стандартні графічні процедури і функції для роботи з фарбами, палітрами та із заповненнями
Щоб задати колір пера (ліній) для описаних раніше процедур, необхідно скористатися процедурою: SetColor(color: word), де параметр color визначає необхідний колір ліній фігури.
Параметр color можна задавати числовим значенням на проміжку від 0 до 15, або ж назвою кольору. Приклад: SetColor(4); SetColor(red);
В обох випадках буде задано червоний колір. Якщо числове значення вийде за межі, вказані вище – кольори будуть циклічно повторюватись, тобто кольору під номером 16 буде дорівнювати значення кольору 0 (чорний), кольору 17 – колір 1 (синій), і т.д.
SetBkColor(color: word) – встановлює поточний колір фону.
Black –чорний |
Blue –синій |
Green -зелений |
Gyan –бірюзовий |
0 |
1 |
2 |
3 |
Red – червоний |
Magenta –малиновий |
Brown –коричневий |
LightGray –сірий-с |
4 |
5 |
6 |
7 |
DarkGray –сірий-т |
LightBlue –голубий |
LghtGreen –зеленийс |
LightGyan – бірюзовий-с |
8 |
9 |
10 |
11 |
LightRed – червоний-с |
LightMagenta – малиновий-с |
Yellow –жовтий |
White – білий |
12 |
13 |
14 |
15 |
Параметр 0, або «чорний» колір вважається прозорим кольором.
За замовчуванням фігури зафарбовуються суцільним білим кольором. Окрім суцільного зафарбовування поверхонь і прямих ліній, передбачено забарвлення за заданим шаблоном. Найбільш поширені шаблони визначені в якості зумовлених констант, для вибору яких використовується процедура SetFillStyle(fill, color: word) Значення констант змінюються від 0 до 12:
|
|
Приклад: SetFillStyle(1,1) – Суцільне зафарбовування синім кольором.
SetFillStyle(3,4) – Заповнення похилими лініями червоного кольору
За допомогою процедури SetFillStyle можна зафарбовувати ті об’єкти, що побудовані процедурами: Bar, FillEllipse, Pieslice, Sector. Процедура SetColor застосовується до всіх, крім Bar, оскільки вона не має ліній – це просто шматок прямокутної області на площині. Суть використання даних процедур дуже проста, як в житті – спочатку береться перо (кисть) і тоді виконується малювання, а не навпаки, тобто, процедури SetColor та SetFillStyle задаються перед початком побудов необхідних фігур. Дані процедури будуть активними для всіх пізніше описаних фігур до тих пір, доки не задається аналогічна з іншими параметрами. Для того, щоб намалювати лінії різного кольору, процедура SetColor задається перед кожною лінією.
Приклад: SetColor(1);
Line(10,10,20,10);
SetColor(4);
Line(10,20,20,20);
Те ж саме стосується і процедури SetFillStyle.
Інколи виникає необхідність зафарбувати певну область, обмежену лініями, або обмежену якоюсь геометричною фігурою. В цьому випадку вже відома нам функція SetFillStyle не допоможе, адже вона призначена тільки для деяких процедур, а саме для процедур, які будують вже зафарбовані фігури. Тому в нашому випадку використовують наступну функцію – функцію заповнення FloodFill.
FloodFill(X,Y, границя: word) - процедура заповнює замкнену область, використовуючи поточний заповнювач, заданий процедурою SetFillStyle. Точка (X,Y) є внутрішньою точкою області, що зафарбовується. Заповнюється область, обмежена лінією, що має колір, визначений параметром "границя". Якщо точка (X,Y) знаходиться усередині замкненої області, то заповнюється внутрішня область. Якщо ця точка знаходиться поза межами замкненої області, то заповнюється її зовнішня частина (поле екрана, що не належить області).
Ще однією важливою умовою використання цієї функції є повне обмеження (замкненість) лініями необхідної для зафарбовування області, інакше зафарбується весь екран.
Параметр кольору процедури FloodFill не слід плутати з кольором, яким зафарбовується
область – це колір ліній, якими обмежена дана область.
На відміну від вище розглянутих процедур, функція FloodFill використовується вже після
побудов. Вона виконує функцію заливки.
Приклад: SetColor(15);
Circle(50,50,100);
SetFillStyle(1,4);
FloodFill(50,50,15);
Коло намальоване лініями білого кольору. Для того щоб його зафарбувати, потрібно вказати будь-яку точку, що лежить в його межах (але не на лінії) – задамо координати центру кола. Оскільки коло намальоване лініями білого кольору (15) – то третій параметр функції FloodFill – 15. Коло буде
зафарбовано суцільною заливкою червоного кольору.
Обов’язковою умовою зафарбовування фігури складної форми є також її побудова лініями одного кольору.
Задача. Написати програму, що будує зафарбований довільний прапор.
Код програми: |
|
Program Prapor; uses graph, crt; var gr, gd, x, y,i:integer; begin gd:=detect; initgraph(gr,gd,'../bgi'); if graphresult<>0 then writeln('ERROR') else begin x:=getmaxx div 2; y:=getmaxy div 2; setfillstyle(1,1); bar(x-100,y-75,x+100,y-25); |
bar(x-100,y-25,x+100,y+25); setfillstyle(1,4); bar(x-100,y+75,x+100,y+25); line(x-100,y-75,x-50,y-25); line(x-100,y+75,x-50,y+25); line(x-50,y+25,x-50,y-25); line(x-100,y-75,x-100,y+75); setfillstyle(1,15); floodfill(x-60,y,15); end; readkey; closegraph; end. |
setfillstyle(1,14);
Задача. Написати програму, що малює гриба.
Код програми: Program Grub;
uses graph, crt; var gr, gd, x, y,i:integer; begin gd:=detect; initgraph(gr,gd,'../bgi'); if graphresult<>0 then
writeln('ERROR') else begin x:=getmaxx div 2;
y:=getmaxy div 2; {трава}
{ніжка} setcolor(2);
bar(x-50,y,x+50,getmaxy); y:=getmaxy div 4*3;
setcolor(4); moveto(x,y-20);
setfillstyle(1,4); lineto(x-30,y+100);
{шапка} lineto(x-70,y);
pieslice(x,y,0,180,200); lineto(x-60,y+110); setfillstyle(1,15); lineto(x-120,y+30);
{плями} lineto(x-80,getmaxy); fillellipse(x,y-25,10,10); lineto(x+80,getmaxy); fillellipse(x-90,y-25,10,10); lineto(x+120,y+30); fillellipse(x-180,y-25,10,10); lineto(x+60,y+110); fillellipse(x+90,y-25,10,10); lineto(x+70,y); fillellipse(x+180,y-25,10,10); lineto(x+30,y+100); fillellipse(x-45,y-95,10,10); lineto(x,y-20); fillellipse(x-135,y-95,10,10); setfillstyle(1,2); fillellipse(x+45,y-95,10,10); floodfill(x,y+10,2); fillellipse(x+135,y-95,10,10); end; fillellipse(x,y-175,10,10); readkey; fillellipse(x-90,y-155,10,10); closegraph; fillellipse(x+90,y-155,10,10); end.