|
|
səhifə | 31/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| printf("%s \n",nr);
printf("adresele din aria de memorie COLORS sunt: \n\n");
for(x=0;x<16;x++)
{
sprintf(culori,"paleta[%02d] : 0x%04X",x,date.colors[x]);
printf("%s\n",culori);
sleep(1); };
sleep(5);
}
FUNCTIA getpalettesize()
-determina numarul de intrari in paleta grafica(dimensiunea paletei)
SINTAXA GENERALA este: int far getpalettesize(void);
Functia determina si returneaza numarul de intrari pentru care poate fi
setata paleta grafica instalata in modul grafic curent.De exemplu,pentru
EGA modul grafic color returneaza 16 (cel monocrom returneaza 1).
Functia returneaza numarul de intrari in paleta grafica actuala.
EXEMPLU: #include
#include
#include
int *drv,*mod,paleta;
main()
{
drv=DETECT;
initgraph(drv,mod,"");
paleta=getpalettesize();
printf("numarul de intrari/paleta= %d \n",paleta);
sleep(5);
}
FUNCTIA getpixel()
-returneaza culoarea(codul culorii) pentru un anumit pixel
SINTAXA GENERALA este:
unsigned far getpixel(int x,int y);
Functia preia si returneaza codul culorii pentru pixelul cu coordonatele
de ecran x si y (x=orizontala iar y=verticala ecranului ).
Functia returneaza codul culorii pentru pixelul specificat.
Se utilizeaza mai ales in aplicatiile grafice animate,in care o anumita
imagine grafica se arhiveaza intr-o structura,pixel cu pixel,pentru a
forma un obiect grafic ce poate fi apoi resetat la nevoie.
-223- [ graphics.h -getpixel() ]
EXEMPLUL 1: #include
#include
#include
int *drv,*mod,x;
unsigned numar;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=1;x<10;x++)
{ setcolor(x);
bar3d(300,200,400,300,20,10);
numar=getpixel(300,200);
printf("Coltul din stanga sus este in culoarea: %d \n",numar);
sleep(2);
}}
Un exemplu pregatitor pentru notiunea de obiect grafic este EXEMPLUL 2:
#include
#include
#include
int *drv,*mod,x,y,z;
unsigned pix[16][16];
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=1;x<16;x++)
{ for(y=1;y<16;y++)
{ putpixel(x,y,y);
pix[x][y]=getpixel(x,y);
};};
sleep(3);
for(z=1;z<30;z++)
{ for(x=1;x<16;x++)
{ for(y=1;y<16;y++)
{ putpixel(z*15+x,z*15+y,pix[x][y];
putpixel(z*x,z*y,pix[x][y];
};};
sleep(1); };
sleep(5); }
In exemplul de mai sus,patratul definit de cele doua bucle for (x si y)
este un obiect grafic,pentru care functia getpixel() a preluat culoarea
fiecarui pixel si a arhivat-o in aria de memorie pix[][].Cele doua bucle
de definitie,impreuna cu aria de memorie care defineste culorile,pot fi
grupate intr-o structura,pentru a forma un obiect grafic independent,ce
poate fi apoi apelat ori de cate ori este nevoie.Dezvoltarea si apoi
perfectionarea acestui tip de programare,a condus la ceea ce se cunoaste
astazi sub numele de programare orientata spre obiect(cu diferenta ca
obiectele informatice nu sunt doar grafice ci pot fi matematice,de tip
caracter,tabele,statistici etc.).Limbajele C++ si Visual C++ contin clase
de functii special dezvoltate pentru construirea,arhivarea si apoi mani-
pularea obiectelor,in cadrul unor rutine,sau cu ajutorul unor comenzi cat
mai simple(se economisesc astfel mii de linii inutile de program).
-224- [ graphics.h-gettextsettings() ]
FUNCTIA gettextsettings()
-arhiveaza intr-o structura speciala date despre texte(font,marime etc.)
SINTAXA GENERALA este:
void far gettextsettings(struct textsettingstype far *texttypeinfo);
Functia arhiveaza informatiile despre fonturi,directia textului,dimen-
siunea caracterelor si pozitia de pe ecran,intr-o structura speciala de
tip textsettingstype definita in graphics.h cu forma generala:
struct textsettingstype { int font;
int direction;
int charsize;
int horiz;
int vert;
};
Exista 10 tipuri predefinite de fonturi,doua directii(0=orizontala si
1=verticala) si 10 dimensiuni ale caracterelor -vezi settextstyle().
Ultimele doua variabile horiz si vert arhiveaza pozitia de pe ecran
(justificarea textului).
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
int *drv,*mod,x,y,z;
char text[80];
struct textsettingstype info;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=1;x<5;x++)
{ for(y=1;y<10;y++)
{ settextstyle(x,0,y);
settextjustify(1,1);
sprintf(text,"Exemplificare text !");
outtextxy(300,200,text);
gettextsettings(&info);
printf("Fontul este: %d \n",info.font);
printf("Dimensiunea este: %d \n",info.charsize);
sleep(1);
cleardevice();
}}}
Functia se utilizeaza pentru a prelua caracteristicile unui text,cu scopul
de a putea reutiliza aceleasi setari in mod repetat(de exemplu aparitia
unor mesaje sau a unor spoturi publicitare etc.Functia gettextsettings()
impreuna cu settextstyle() au fost dezvoltate si perfectionate intr-un
stil independent de editare a textului cunoscut actual sub numele de
hipertext si utilizat mai ales pentru redactarea articolelor de ziar si
a site-urilor pentru Internet.
Nu ezitati sa exersati cat mai multe exemple care apeleaza functiile
de editare a textului in modulul grafic,deoarece sunt simple si spectacu-
loase.Exentual incercati sa realizati una sau mai multe bare de teletext,
de grosimi diferite,in care textul sa defileze cu viteze diferite (fie pe
orizontala,fie pe verticala).Apoi incercati sa dezvoltati o functie care
sa defileze textul in sens contrar(pentru a reciti un text oarecare)etc.
-225- [ getviewsettings()-getx()-gety() ]
FUNCTIA getviewsettings()
-citeste si arhiveaza intr-o structura date despre regiunea activa
SINTAXA GENERALA este:
void far getviewsettings(struct viewporttype far *viewport);
Functia citeste informatiile despre regiunea activa a ecranului (colturile
si setarea modului clip) si le arhiveaza intr-o structura speciala de tip
viewporttype definita in graphics.h cu forma generala:
struct viewporttype { int left,top,right,bottom;
int clip;
};
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
#include
struct viewporttype info;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
bar3d(200,200,300,300,50,10);
getviewsettings(&info);
printf("Regiunea activa are urmatoarele limite: \n");
printf(" stanga: %d sus: %d \n",info.left,info.top);
printf(" dreapta:%d jos: %d \n",info.right,info.bottom);
printf(" clipperul este setat: %d \n",info.clip);
sleep(5);
}
Observati ca regiunea activa se refera la ecran si nu la desenul trasat.
FUNCTIA getx()
-determina si returneaza coordonata orizontala a cursorului
SINTAXA GENERALA este: int far getx(void);
Functia determina si returneaza valaorea coordonatei orizontale a curso-
rului(axa Ox).Valoarea returnata este in concordanta cu regiunea activa
a ecranului(valoarea se raporteaza la punctul zero al regiunii active).
Functia returneaza o valoare de tip int.
EXEMPLU: vezi exemplul de la functia gety()
FUNCTIA gety()
-determina si returneaza coordonata verticala a cursorului
SINTAXA GENERALA este: int far gety(void)
Functia determina si returneaza coordonata verticala (axa Oy) pentru
pozitia actuala a cursorului.Valaorea returnata este dependenta de regiu-
nea activa,deoarece se raporteaza la punctul zero al regiunii active de
ecran.
Functia returneaza o valoare de tip int.
Se utilizeaza impreuna cu functia getx(),pentru a determina pozitia
actuala a cursorului pe ecran,sau pentru a controla trasarea graficelor
si/sau afisarea textelor in modul grafic.
Se utilizeaza frecvent si in rutinele de identificare a pozitiei
cursorului,mai ales atunci cand se utilizeaza butoane sau alte simboluri
grafice pentru a crea o interfata grafica intre program si utilizator.
-226- [graphics.h -graphdefaults() ]
EXEMPLU: #include
#include
#include
#include
int *drv,*mod,a,b,x,y,z;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
randomize();
for (z=1;z<20;z++)
{ a=random(500);
b=random(400);
bar3d(a,b,random(500),random(400),20,10);
moveto(a,b);
x=getx();
y=gety();
printf("Coltul staga sus este la: x=%d si y=%d \n",x,y);
sleep(3);
cleardevice();
}}
FUNCTIA graphdefaults()
-reseteaza toate setarile grafice la valorile originale(implicite)
SINTAXA GENERALA este: void far graphdefaults(void);
Functia efectueaza urmatoarele actiuni: 1.seteaza regiunea activa la tot
ecranul 2.deplaseaza cursorul la pozitia 0,0 3.seteaza paleta de culori,
culoarea de fond si culoarea penitei la valorile implicite (negru/alb)
4.reseteaza valoarea implicita a modelului grafic 5.reseteaza valoarea
implicita a fonturilor si a directiei de scriere a textelor.
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
int *drv,*mod,x;
char text[80];
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=1;x<11;x++)
{ setcolor(x);
setbkcolor(x+3);
bar3d(300,200,400,300,50,10);
settextstyle(4,0,x);
sprintf(text,"BUNA ZIUA !");
outtextxy(100,350,text);
sleep(2);
cleardevice();
graphdefaults();
bar3d(300,200,400,300,50,10);
outtextxy(100,350,text);
sleep(2);
cleardevice(); }}
-227- [ grapherrormsg()-_graphgetmem() ]
FUNCTIA grapherrormsg()
-returneaza un pointer spre mesajul de eroare returnat de graphresult()
SINTAXA GENERALA este: char *far grapherrormsg(int errorcode);
Functia returneaza un pointer spre sirul care contine mesajul de eroare
corespunzator codului de eroare returnat de catre functia graphresult().
Tabelul cu mesajele de eroare este prezentat la functia graphresult().
EXEMPLU: #include
#include
#include
int drv,mod,eroare;
main()
{ drv=55;
initgraph(&drv,&mod,"");
eroare=graphresult();
printf("Codul erorii este: %d \n",eroare);
printf("Mesajul de eroare este: %s \n",grapherrormsg(eroare));
sleep(5);
printf("Alte mesaje posibile sunt: \n");
for (eroare=-18;eroare<1;eroare++)
{
printf("codul=%d \n",eroare);
printf("Mesajul este: %s \n",grapherrormsg(eroare);
sleep(1); };
sleep(5); }
FUNCTIA _graphgetmem()
-aloca memorie pentru tampoanele interne ale driverelor grafice
SINTAXA GENERALA este: void far *far _graphgetmem(unsigned size);
Functia este apelata de catre rutinele din biblioteca de functii grafice
(nu si de cele definite de utilizator),pentru a aloca memoria necesara
pentru tampoanele interne de memorie ale driverelor grafice si ale carac-
terelor de tip text.Daca utilizati functiile predefinite din biblioteca
grafica,nu este necesar sa realocati memorie,deoarece aceasta sa va aloca
automat.Daca doriti sa specificati expres modul de management al memoriei
destinata driverului grafic instalat puteti sa utilizati _graphgetmem()
cu conditia sa fie declarata exact ca in modelul de sintaxa.Functiile
implicite aloca memoria apeland functia malloc().Daca nu stiti exact ce
rezultat ve-ti obtine,este preferabil sa nu modificati modul implicit de
alocare a memoriei,deoarece riscati sa defectati driver-ul grafic instalat
si sa ramaneti fara nici o imagine.
Functia nu returneaza nici o valoare.Pentru eliberarea memoriei alocate se
poate utiliza functia _graphfreemem() (vezi mai jos)
EXEMPLU: vezi graphfreemem()
FUNCTIA _graphfreemem()
-elibereaza memoria alocata anterior cu _graphgetmem()
SINTAXA GENERALA este: void far _graphfreemem(void far *ptr,unsigned size);
Functia este apelata de catre toate functiile grafice,pentru a elibera
memoria alocata anterior cu _graphgetmem().Puteti apela functia atunci
cand a-ti utilizat functia _graphgetmem() pentru driverul grafic,
Functia nu returneaza nici o valoare.
-228- [ graphfreemem() - graphresult() ]
EXEMPLU: #include
#include
int *drv,*mod,rezultat;
unsigned tampon=32000;
void *var1;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
_graphgetmem(tampon);
rezultat=graphresult();
printf("Codul de eroare este: %d \n",rezultat);
bar3d(200,300,300,400,50,20);
sleep(3);
_graphfreemem(var1,tampon);
}
Atentie sa nu eliberati tampoanele de memorie atat timp cat sunt inca
necesare pentru executia functiilor grafice curente sau viitoare.La
sfarsitul aplicatiei grafice,nu uitati sa eliberati memoria alocata,
pentru a elibera meoria de operare de datele inutile.Daca utilizati doar
functiile predefinite in libraria de functii grafice,acestea isi gestio-
neaza singure memoria si nu e cazul sa apelati graphfreemem() inutil.
FUNCTIA graphresult()
-returneaza codul de eroare al ultimei operatii care a generat o eroare
SINTAXA GENERALA este: int far graphresult(void);
Functia returneaza codul de eroare al ultimei operatii ce a generat o
eroare si respectiv reseteaza variabila error la grOK.Codul returnat si
respectiv mesajul de eroare este continut in tipul de data graph_errors
predefinit in graphics.h cu urmatoarele valori:
CODUL CONSTANTA MESAJUL DE EROARE CORESPUNZATOR
0 grOk No error
-1 grNoInitGraph (BGI) graphics not installed(use initgraph)
-2 grNotDetected Graphics hardware not detected
-3 grFileNotFound Device driver file not found
-4 grInvalidDriver Invalid device driver file
-5 grNoLoadMem Not enough memory to load driver
-6 grNoScanMem Out of memory in scan fill
-7 grNoFloodMem Out of memory in flood fill
-8 grFontNot Found Font file not found
-9 igrNoFontMem Not enough memory to load font
-10 grInvalid Mode Invalid graphics mode for selected driver
-11 grError Graphics error
-12 grlOerror Graphics I/O error
-13 grInvalidFont Invalid font file
-14 grInvalidFontNum Invalid font number
-15 grInvalidDeviceNum Invalid device number
-18 grInvalidVersion Invalid version number
Dupa apelarea functiei,variabila este resetata automat la zero.Pentru a
salva rezultatul functiei graphresult() utilizati o variabila temporara
special destinata functiei.
Functia returneaza codul ultimei erori inregistrate (-15 la 0)
-229- [ graphics.h -imagesize() ]
EXEMPLU: #include
#include
#include
int drv,mod,e,z;
main()
{ for(z=0;z<7;z++)
{ drv=z;
initgraph(&drv,&mod,"");
e=hraphresult();
printf("driverul instalat este: %d \n",z);
if(e==0)
printf("Nu exista erori in modulul grafic ! \n");
else
printf("Eroare numarul %d in modulul grafic ! \n",e);
sleep(3); };
}
FUNCTIA imagesize()
-determina marimea spatiului de memorie necesar pentru o imagine bitmap
SINTAXA GENERALA este:
unsigned far imagesize(int left,int top,int right,int bottom);
Functia determina si returneaza in bytes,dimensiunea pentru aria de me-
morie necesara pentru a arhiva o imagine grafica bit cu bit(bitmap).Daca
spatiul necesar pentru arhivarea imaginii specificate este mai mare sau
egal cu 64K-1,functia returneaza 0xFFFF (-1).In definitie,left,top,right
si bottom specifica coordonatele colturilor stanga sus si dreapta jos ale
imaginii specificate(aria totala trebuie sa fie mai mica de 63999 bytes).
Functia returneaza in bytes dimensiunea ariei de memorie.
EXEMPLU: #include
#include
#include
int *drv,*mod;
unsigned d;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
bar3d(200,250,300,350,50,10);
d=imagesize(200,250,300,350);
printf("desenul ocupa in memorie: %d bytes \n",d);
sleep(3);
setcolor(4);
setfillstyle(4,7);
bar3d(150,150,500,350,50,10);
floodfill(200,200,4);
d=imagesize(150,150,500,350);
printf("desenul 2 ocupa: %d bytes de memorie ! \n",d);
printf("Eroare= %d \n",graphresult());
sleep(3);
}
Observati ca dimensiunea spatului de memorie ocupat este aceeasi,indi-
ferent de culoarea penitei sau de modelul grafic utilizat(pattern).
-230- [ graphics.h - initgraph() ]
FUNCTIA initgraph()
-initializeaza modul grafic al ecranului
SINTAXA GENERALA este:
void far initgraph(int far *graphdriver,int far *graphmode,char far *path);
Functia se utilizeaza pentru a initializa modul grafic al ecranului si
trebuie apelata inainte de a apela oricare alta functie grafica,deoarece
functiile grafice nu pot fi apelate decat dupa incarcarea driver-ului
grafic de pe disc.Parametrii functiei sunt graphdriver si graphmode,care
permit fie detectarea automata,fie specificarea explicita a driver-ului
grafic solicitat si respectiv calea spre driverul grafic solicitat(path).
Daca utilizati varianta de autodetectie,functia va reseta toate setarile
grafice la valoarea implicita(paleta,culoarea,pozitia cursorului,regiunea
activa a ecranului etc.).In mod normal,functia incarca driverul grafic
dupa ce aloca spatiul de memorie necesar cu ajutorul functiei graphgetmem
(automat),dupa care selecteaza fila .BGI apelata de pe disc.Alternativ,
se poate adauga un driver grafic si realizand un link (conexiune fixa)
intre fila care contine driverul grafic si fila de program executabila din
care este apelat.
Calea de acces la driver (*path) trebuie sa specifice directorul in care
Dostları ilə paylaş: |
|
|