Суз боши Borland С++ графикасига кириш


Download 299 Kb.
bet3/7
Sana22.02.2023
Hajmi299 Kb.
#1222106
1   2   3   4   5   6   7
Bog'liq
Borland C графикаси

CGA EGA/VGA
___________________________________________________________________________
BLACK 0 EGA _BLACK 0
BLUE 1 EGA _BLUE 1
GREEN 2 EGA _GREEN 2
CYAN 3 EGA _CYAN 3
RED 4 EGA _RED 4
MAGENTA 5 EGA _ MAGENTA 5
BROWN 6 EGA _ LIGHTGRAY 7
LIGHTGRAY 7 EGA _BROWN 20
DARK BLACK 8 EGA _ DARKGRAY 56
LIGHTBLUE 9 EGA _ LIGHTBLUE 57
LIGHTGREEN 10 EGA _LIGHTGREEN 58
LIGHTCYAN 11 EGA _LIGHTCYAN 59
LIGHTRED 12 EGA _ LIGHTRED 60
LIGHTMAGENTA 13 EGA _LIGHTMAGENTA 61
YELLOW 14 EGA _YELLOW 62
WHITE 15 EGA _WHITE 63
___________________________________________________________________________
Рангларга таълукли равишда VGA драйвери EGA драйверига ухшаб ишлайди, аммо юкори кенгайтмага эга.
Ранг фонини урнатиш учун void far setbkcolor(int color) функцияси ёрдамида амалга оширилади, палитраларни узгартириш учун void far setpalette(int index,int color) функциясида фойдаланилади, шунингдек бу функция CGA видеоадаптери учун таълукли булмай, бу ерда хар доим index нолга тенг булади
Эслатиб утамиз, гарфик экран нукталар массивини намойиш этади
Хар бир нукта экранда битта нукта билан мос келиб узининг рангига эга. Экрандаги (х,у) координатасидаги нукта рангини урнатиш учун
void far putpixel(int x,int y, int color);
функцияси ёрдамида амалга ошириш мумкин.
Асосий чизувчи функциялар line() ва circle() лардир. Уларнинг кенгайтмалари
void far line(int x,int y,int x1,int y1);
void far circle(int x,int y,int radius);
line() функцияси берилган ранг билан экранда (x,y) нукта координатасидан ( x1,y1) координатасигача чизик чизади.
circle() функцияси экранда берилган ранг билан марказий нукта (x,y) координатаси ва radius радиусли (кучиш оралиги - нукта) айлана чизади. Уз-узидан мавжуд ранг сифатида WHITE урнатилади. (Эътибор беринг барча макрослар бош харфларда ёзиляпти). Чизилаётган чизикнинг рангини узгартириш учун setcolor() функцичсидан фойдаланилади унинг кенгайтмаси
void far setcolor(int color);
Бошка чизувчи функцияларга куйидагилар:
arc() - айлана ёйини чизади;
drawpoly() - купбурчак контурини чизади;
ellipse() - эллипс чизади;
linerei() - берилган нуктадан курсатилган нуктагача ораликни чизик билан
туташтиради
lineto() - берилган нуктадан (x,y) координатагача чизик чизади;
moveto() - нуктани (x,y) нуктали координатага кучиради;
rectangle() - туртбурчак чизади;
setaspectratio() – уз-узидан урнатилган кисиш коэффициентини узгартиради;
setlinestyle() - кенгликни ва чизик стилини урнатади.
Мисол сифатида rectangle() функцияси прототипига мисол келтирамиз
void far rectangle( int left,int top,int right, int bottom);
Контурлар оралигини курсатилган шаблон ва берилган ранг тулдириш учун floodfill() функцияси хизмат килади. Унинг кенгайтмаси
void far floodfill(int x,int y,int bordecolor);
бу ерда х ва у – контур ички нукталари координаталари, bordecolor- контур ранги. Ранг ва шаблон тулдириш куйидаги функция
voi far setfillstyle (int pattern,int color);
ёрдамида тулдирилади.
Буяш шаблони куриниши ва унга мос макрос ва киймати(pattern) 3-жадвалда келтирилган.
3-жадвал
__________________________________________________________________________
Макрос Киймат Шаблон куриниши
___________________________________________________________________________
EMPTY_FILL 0 Фонни ранг билан тулдириш
SOLD_FILL 1 Берилган ранг билан ялпи тулдириш
LINE _FILL 2 чизик билан__________
LSTLASH_FILL 3 кия чизик ///
SLASH_FILL 4 Ёркин кия чизик //
BKSLASH_FILL 5 Тескари кия чизик \\
LTBKSLASH_FILL 6 Ёркин тескари кия чизик \\
HATCH_FILL 7 Рангли штрих тур
XHATCH_FILL 8 Крест куринишли штрих
INTERLEAVE_FILL 9 Кесилган чизикли штрих
WIDE_DOT_FILL 10 Саёз нукталар билан тулдириш
CLOSE_DOT_FILL 11 Тикинч нукталар билан тулдириш
USER_FILL 12 Фойдаланувчи аниклаган шаблон билан
тулдириш
___________________________________________________________________________
Шунингдек контур чизадиган ва контур худудини буяйдиган функцияллар туплами мавжуд:
bar() - туртбурчакни тулдириш;
bar3d() -устунни тулдириш;
fillelipse() -эллипсни тулдириш;
fillpoly() -купбурчакни тулдириш;
pieslice() -айлана секторини тулдириш;
sector() -эллипс секторини тулдириш;
Бу функция протипларининг кулланилиши ва фойдаланиш асослари Borland C++ нинг HELP – тизимидан билишигиз мумкин.
Borland C++ нинг график кутубхонаси айрим функцияларни санаб утамиз.
setfillpattern()- фойдаланувчи томонидан аникланадиган шаблон куринишини беради ;
getfillpattern()- тулдриш шаблони курнишини беради;
getfillsetting() - шаблон ва буяш ранги хакида хабар беради;
getlinesetting()- берилган стил, калинлик ва буяш ранги хакида хабар беради;
getpixel() - (x,y) нуктадаги рангни беради.
Бошда биз график ойна ва унинг бутун экранни тулик тутитиши хакида хабар берган эдик. Кичикрок булган график ойнани бериш учун setviewport() функциясидан фойдаланилади. Унинг кенгайтмаси
void far setviewport( int left,int top,int right, int bottom,int flag);
left,top, right, bottom параметрлар жойлашиш урни ва ойна координаталари улчамлари шунингдек, экран координаталарини беради. flag параметри ойна худудидан чикиш режимини урнатади. Агар flag нолга тенг булмаса, ойна чегарасидан чикишда автоматик узилиш юз беради, акс холда ойна худудидан чикиб кетиш юз беради. Бу ва бошка холда хам хатолик белгиланмайди.
Ойна, экран ва тасвир(image) билан ишлашда куйидаги функциялар хизмат килади:
cleardevice() - актив сахифани тозалайди;
setactivpage() - актив сахифа номерини белгилайди;
setvisualpage() - куриниб турган сахифани номерлайди;
clearviewport() - актив ойнани тозалайди;
getviewsetting() - актив ойна хакида маълумот беради;
getimage() - тасвирни берилган хотирага ёзади;
imagesize() - тугри туртбурчакли ойна хотирадан эгаллаб турган хотира улчами хакида маълумот беради;
putimage() - экранга аввал хотирага ёзилган тасвирни жойлаштиради.
cleardevice() функцияси тулик экранни тозалайди, юкори чап бурчак нуктасини урнатади, аммо график экранни узгартирмайди, стилни, чизикни, берилган рангни ва бошк.
clearviewport() функцияси берилган ойнани тозалайди ва берилган нуктани ойнанинг чап юкори бурчагига жойлаштиради.
Видеоадаптер типига ва видесиситеманиг урнатилиш режимига боглик равишда биттадан турттагача буфер сахифаларга эга булади. Сахифалар сони 1-жадв.да айтиб утилган эди. Хар бир сахифа актив куринишида чикариш юз берадиган ва визуал (куринарли) курнишда бериш мумкин. Уз-узидан актив ва куриниб турган сахифалар мос тушади.
Тасвирни берилган шаблон буйича харакатлантириш учун getimage(),imagesize() ва putimage() функциялари хизмат килади: getimage() функцияси ёрдамида экранни бир кисмини белгилаш мумкин, imagesize() чакириш билан тасвир эгаллаб турган хотира хажмини аниклаш, ва шундан сунг экранга хохлаган жойига putimage() функцияси ёрдамида жойлаштиришими мумкин.
Нихоят, график режимда матнни чикариш учун куйидаги функциялардан фойдаланиш мумкин.
outtext() - матнни курсатилган жойда чикариш;
outtextxy() - берилган уринда матнни экрада чикариш;
settextjustify() - текстни буриш режимини кайтаради;
setusercharsize() - шрифтни урнатади,стиль ва матнни катталаштириш коэффициентини беради;
textheight() - матнни баландлигини нукталарда беради;
textwith() - матнни кенглигини нукталарда беради.
Бу функция кенгайтмалари куйидаги куринишда:
void far outtext (char far*textstring);
void far outtextxy(int x,int y,char far *textstring);
Одатда (settextjustify функциясини кулламасдан) бошланиш нуктаси чап юкори бурчакда жойлашади.
Матний режимда символлар куриниши экранда белгилар генератори деб аталувчи техник воситаларни аниклайди, шундай экан биз унинг шаклни узгартира оламиз. График режимда белгилар нукталар ёрдамида хосил килинади. Бундай холатда ихтиёрий шрифтдаги даструрий восита ёрдамида амалга ошириш мумкин. Турбо Си график пакетида бир неча турдаги шрифтлар мавжуд. Агар шрифт улчами фойдаланувчи томонидан берилмаган булса, у холда хар бир белги 8х8 нуктали улчамдаги туртбурчакда сакланади. График режимда матнларни тасвирлар учун автоматик кейинги сатрга утиш, олдинги сатрни тулдириш кабиларни хал киладиган хеч кандай восита мавжуд эмас, шунинг учун учун биздан ойнада сатрни тасвирлаш учун жой етиши хакида уйлашимиз керак. Бу амални бажаришда белгилар сонини ва нукталар сонини алмаштириб юбормаслигимизга эътибор бериш керак. Бу ерда бизга GRAPHICS.H файлидаги Турбо Си нинг иккита функцияси ёрдамга келади:
int far textwidth(char far*textstring);
int far textheight (char far*textstring);
Бу функциялар горизонтал ва вертикал куринишда берилган textstring узгарувчиси ёрдамида берилган матн сатри эгаллаб турган нукталар сонини аниклайди. Масалан, агар X_max ва Y_max Х ва У уклари буйича максимал кийматни аникласа, у холда “АВС сатрни пастки унг бурчакда куйидаги ифодалаш мумкин:
outtextxy(X_max+1-textwidth(“ABC”), Y_max+1-textheight (“ABC”),”ABC”);
Агар Геркулес типидаги адаптер кулланилган булса , у холда биринчи ва иккинчи аргументларга куйидаги кийматлар хисобланади:
719+1-3х8=696 ва
347+1-8=340 мос равишда.
Агар амалий масалада битта типдаги шрифт ва улчам етишмаса, у холда Турбо Си нинг куйидаги функцияларни ишлатиш мумкин:
void far settextstyle(int font,int direction,int charsize);
Функция GRAPHICS.H файлида айнан мана шундй эълон килинган. Биринчи font аргаменти 0,1,2,3,4 бутун сонлардан бирини узлаштириши мумкин:

Download 299 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling