|
lic(cel din paranteze).Daca parametrul specificat este invalid,functia
|
səhifə | 34/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| lic(cel din paranteze).Daca parametrul specificat este invalid,functia
graphresult() returneaza -1(grError) iar modelul grafic de umplere va
ramane nemodificat.Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
setfillstyle(1,4);
settextstyle(1,0,8);
outtextxy(100,100,"000");
floodfill(115,125,15);
setfillstyle(5,14);
floodfill(165,125,15);
setfillstyle(7,3);
floodfill(220,125,15);
setcolor(10);
rectangle(25,250,610,400);
setfillstyle(4,12);
floodfill(30,255,10);
outtextxy(50,300,"MODEL GRAFIC");
sleep(3);
}
FUNCTIA setgraphbufsize()
-seteaza tamponul de memorie grafica alocat de functia initgraph()
SINTAXA GENERALA este: unsigned far setgraphbufsize(unsigned bufsize);
La initializarea modului grafic,functia initgraph() aloca un tampon de
memorie de 4096 bytes,care va fi utilizat de catre unele dintre functiile
grafice (de exemplu floodfill() utilizeaza tamponul pentru modelul grafic
definit de utilizator cu setfillpattern() ).Tamponul este alocat automat
la initializare si eliberat automat la inchiderea modului grafic.
Daca doriti sa percizati un tampon de memorie mai mic (pentru a economisi
memorie de operare) sau mai mare (pentru a putea salva module mai mari),
puteti utiliza functia setgraphbuf size() si specificati in bytes dimen-
siunea tamponului intern alocat la initializare (functia initgraph() va
apela functia _graphgetmem(), care va apela malloc()...).
-247- [ graphics.h-setgraphmode() ]
Pentru ca functia sa poata fi aplicata,trebuie sa fie apelata inainte de
initgraph().Dupa initializare,apelurile catre setgraphbufsize() vor fi
ignorate.Pentru redimensionarea tamponului intern,dupa initializare,
trebuie sa inchideti modul grafic cu closegraph(),sa resetati tamponul cu
setgraphbufsize() si apoi sa reinitializati modul grafic.
Functia returneaza dimensiunea tamponului intern de memorie alocat.
EXEMPLU: #include
#include
int *drv,*mod,tampon;
unsigned y=2048;
char text[80];
main()
{
tampon=setgraphbufsize(y);
drv=DETECT;
initgraph(drv,mod,"")'
sprintf(text,"Tamponul grafic este de: %d bytes",y);
outtextxy(100,100,text);
sleep(3);
closegraph();
}
Functia este utila,atunci cand utilizati procesoare cu memorie interna
limitata (16-32 de Kb) sau cand,dimpotriva,doriti sa utilizati memoria
interna pentru a manipula obiecte grafice mari .
FUNCTIA setgraphmode()
-seteaza un mod grafic (vezi graphics_modes )
SINTAXA GENERALA este: void far setgraphmode( int mode );
Functia se utilizeaza pentru a selecta un alt mod grafic decat cel insta-
lat curent prin initgraph().Pentru ca functia sa fie executabila,trebuie
ca modul grafic specificat sa fie compatibil cu driverul grafic instalat.
La apelare,functia setgraphmode() sterge ecranul si instaleaza noul mod
grafic cu toate setarile grafice la valoarea lor implicita(pozitia cursor-
ului,paleta grafica,culorile,regiunea activa etc.).Functia se poate uti-
liza impreuna cu restorecrtmode() pentru a alterna intre modul grafic si
modul text al ecranului.Nu returneaza valori.Pentru valori invalide,
graphresult() va returna valoarea -10(grInvalidMode).
EXEMPLU: #include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
outtext("Modul grafic implicit:");
bar3d(100,100,200,200,10,10);
sleep(3);
restorecrtmode();
setgraphmode(0);
outtext("Modul grafic 0 :");
bar3d(100,100,200,200,10,10);
sleep(3); }
-248- [ graphics.h - setlinestyle() ]
FUNCTIA setlinestyle()
-seteaza stilul liniilor trasate
SINTAXA GENERALA este:
void far setlinestyle(int linestyle,unsigned upattern,int thickness);
unde: linestyle este tipul de linie,upattern este modelul grafic utilizat
pentru trasarea liniilor iar thickness este grosimea liniilor.
Caracteristicile utilizate pentru trasarea liniilor sunt predefinite in
graphics.h intr-o structura de tipul linesettingstype cu forma generala:
struct linesettingstype { int linestyle;
unsigned upattern;
int thickness;
};
Pentru tipul de linie (linestyle) exista 5 tipuri predefinite:
0 (SOLID_LINE) ,1 (DOTTED_LINE) ,2 (CENTER_LINE) ,3 (DASHED_LINE) si
4 (USERBIT_LINE)
Modelul grafic utilizat (uppatern) se aplica doar pentru tipul 4 de linie
(cel definit de utilizator),dar trebuie specificat in definitie si la
celelalte tipuri de linie,dar valaorea specificata va fi ignorata.Pentru
tipul 4 de linie,upattern va fi o definitie pe 16 biti (generata de scri-
erea in format binar a numarului unsigned specificat),care va determina
modul de trasare a liniei astfel:linie continua pentru bytes de tip 0xFFFF
si spatii goale pentru cei de tip 0x0F0F (De exemplu:0x333 si 0x0F0F va
determina prin repetitie o linie punctata).Pentru a intelege modul de
trasare a liniei,scrieti numarul specificat pentru upattern in format
binar (punct pentru 11 si spatiu pentru fiecare 01 ).
Grosimea liniei (thickness) poate fi 1(NORM_WIDTH) sau 3(THICK_WIDTH) care
vor trasa linii cu grosimea de 1 pixel si respectiv 3 pixeli.
Modul de setare a liniilor,afecteaza modul de reprezentare pentru linii
si poligoane,dreptungiuri si bare 3d etc. dar nu afecteaza modul de
reprezentare pentru cercuri,elipse si segmente de elipsa(doar grosimea).
Nu returneaza valori.La argumente invalide,graphresult() returneaza -11.
EXEMPLU: #include
#include
int *drv,*mod;
unsigned punct;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
punct=7777;
setlinestyle(4,punct,3);
setcolor(3);
line(50,50,400,50);
punct=1;
setlinestyle(4,punct,3);
setcolor(14);
line(50,100,400,100);
setlinestyle(1,1,1);
setcolor(12);
line(50,150,400,150);
sleep(3); }
Nu ezitati sa experimentati tipuri personalizate de linie.
-249- [ setpalette()-setrgbpalette() ]
FUNCTIA setpalette()
-modifica o culoare din paleta de culori
SINTAXA GENERALA este: void far setpalette(int colornum,int color);
Functia modifica una dintre culorile din paleta grafica cu cea specificata
Primul parametru (colornum) indica culoarea ce urmeaza sa fie inlocuita,
iar cel de al doilea(color) specifica noua culoare.De exemplu comanda
setpalette(0,5) modifica prima culoare din paleta(culoarea de fond) in
culoarea 5 (MAGENTA).Daca paleta grafica contine 16 culori de baza,valoa-
rea pentru primul parametru poate fi intre 0 si 15.
Pentru monitoarele de tip EGA/VGA se pot schimba toate culorile din paleta
grafica,iar pentru cele de tip CGA se poate modifica doar prima culoare
din paleta(0 este culoarea de fond).Se pot utiliza atat codurile numerice
ale culorilor cat si cele simbolice(RED,BLUE etc.).Functia nu poate fi
apelata pentru driverul IBM-8514 care accepta doar functia setrgbpalette.
Functia nu returneaza valori.Daca parametrul apelat este invalid,functia
graphresult() va returna -11,iar paleta grafica va ramane nemodificata.
EXEMPLU: #include
#include
int *drv,*mod,x;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
outtextxy(10,0,"Paleta implicita");
outtextxy(250,0,"Paleta modificata);
for(x=1;x<16;x++)
{ setcolor(x);
setfillstyle(1,x);
bar3d(50,20*x,100,20*x+10,10,10); }
sleep(1);
for(x=1;x<16;x++)
{ setpalette(x,16-x);
setcolor(x);
setfillstyle(1,x);
bar3d(300,20*x,350,20*x+10,10,10);
sleep(1); }
sleep(3); }
In exemplu,bucla for...modifica intrega paleta de culori.Scrieti un
exercitiu in care sa modificati o singura culoare din paleta.
FUNCTIA setrgbpalette()
-permite modificarea unei culori din paleta grafica (inclusiv nuante)
SINTAXA GENERALA este:
void far setrgbpalette(int colornum,int red,int green,int blue);
Functia poate fi apelata pentru driverele IBM 8514 si VGA.
Primul parametru(colornum) specifica culoarea din paleta ce urmeaza sa
fie inlocuita,iar urmatorii(red,green,blue) contin definitia pentru cele
trei culori fundamentale ce vor forma nuanta culorii finale pe care o
introduceti in paleta grafica.Pentru monitoarele IBM 8514 colornum poate
lua valori intre 0-255 (contine 256 de culori) iar pentru cele de tip
VGA intre 0-15.Pentru fiecare dintre cele trei culori,se va utiliza doar
byte-ul(octetul) de nivel inferior(ultimul),si din acesta,doar ultimii
-250- [ graphics.h -settextjustify() ]
6 biti,cei mai semnificativi (valori de la 0-255).
Pentru compatibilitate directa intre driverul IBM si cel de tip VGA,
primele 16 culori din paleta grafica IBM sunt identice cu cele 16 culori
din paleta grafica VGA.Astfel functiile setrgbpalette() in care primul
parametru este mai mic de 16,vor putea fi aplicate pe ambele tipuri de
adaptoare,in timp ce cele cu valori mai mari de 16,vor putea fi apelate
doar pentru driverul de tip IBM.
Functia nu returneaza valori (nu este depanabila).
EXEMPLU: #include
#include
int *drv,*mod,x;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
setfillstyle(1,2);
bar3d(100,100,200,200,20,20);
sleep(3);
for(x=1;x<16;x++)
{ setrgbpalette(2,x*10,x*3,x*30);
bar3d(100,100,200,200,20,20);
sleep(1); }
sleep(3); }
Functia este extrem de utila,deoarece permite alegerea unei game foarte
largi de nuante pentru culorile din paleta grafica.Pentru fiecare culoare
fundamentala se pot utiliza valori intre 0 si 255.Cu cat valoarea este
mai mare,cu atat nuanta rezultata va fi mai apropiata de ea.Exemplu,daca
utilizati 255 pentru RED si valori mici pentru BLUE si GREEN vor rezulta
doar nuante de rosu.Prin combinarea celor trei culori se pot obtine
255*255*255 adica 16.581.380 de nuante de culoare.Nu ezitati sa experi-
mentati si sa va formati palete personalizate de culori,pentru aplicatiile
grafice.Eventual salvati definitiile intr-o biblioteca de functii pe care
o puteti introduce in directorul INCLUDE si utiliza apoi in aplicatii.
FUNCTIA settextjustify();
-seteaza pozitia si directia de scriere a textului
SINTAXA GENERALA este: void far settextjustify(int horiz,int vert);
Functia localizeaza pozitia fata de care se va alinia textul ce urmeaza
dupa apelarea functiei si modul in care se va face alinierea (la dreapta
sau la stanga) in jurul pozitiei actuale a cursorului.Pozitia initiala si
implicita este determinata de setarile LEFT_TEXT si TOP_TEXT(adica ali-
nierea se va face la staga,din coltul de sus al paginii.
Valorile compatibile cu functia sunt predefinite in graphics.h dupa cum
urmeaza:
horiz LEFT_TEXT 0 left-justify text (aliniat stanga)
CENTER_TEXT 1 center text (centrat)
RIGHT_TEXT 2 right_justify text (aliniat dreapta-al doilea)
vert BOTTOM_TEXT 0 justify from bottom (aliniat jos)
CENTER_TEXT 1 center text (centrat)
TOP_TEXT 2 justify from top (aliniat sus-al doilea)
Daca se utilizeaza parametrul LEFT_TEXT si directia orizontala de scriere,
cursorul va avansa cu lungimea sirului scris,dupa fiecare outtext().
-251- [ graphics.h -settextstyle() ]
Functia este activa pentru textele afisate in mod grafic cu outtext().
Functia nu poate fi apelata in modul text sau pentru functiile din
stream.Functia nu returneaza valori.Daca parametrii transferati sunt
invalizi,functia graphresult() returneaza -11 iar modul de aliniere a
textului afisat ramane nemodificat.
EXEMPLU: #include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
outtextxy(100,200,"Exemplu de aliniere: ");
settextjustify(0,2);
outtext("Valoare 1");
outtext("Valoare 2 ");
settextjustify(2,2);
outtext("Valoare 3 ");
outtext("Valoare 4 ");
sleep(3); }
Functia se poate utiliza pentru realizare de tabele,sau blocuri de text
si coloane de text in modul grafic.Observati ca in exemplu am lasat spatii
goale,acolo unde se vor insera textele urmatoare,pentru a evita supra-
punerile.
FUNCTIA settextstyle()
-seteaza fontul,directia de scriere si dimensiunea caracterelor
SINTAXA GENERALA este:
void far settextstyle(int font,int direction,int charsize);
Functia afecteaza textul afisat cu outtext() sau outtextxy() si seteaza
fontul,directia de scriere si grosimea caracterelor utilizate.
Pentru selectarea fonturilor,se pot utiliza definitii de 8x8 biti( cate
un octet) sau se pot utiliza fonturi predefinite si fonturi speciale.
Fonturile predefinite in graphics.h sunt:
0 (DEFAULT_FONT) ,1 (TRIPLEX_FONT) ,2 (SMALL_FONT) ,3 (SANS_SERIF_FONT) ,
4 (GOTHIC_FONT) ,5 (SCRIPT_FONT) ,6 (SIMPLEX_FONT) ,7 (TRIPLEX_SCR_FONT) ,
8 (COMPLEX_FONT) ,9 (EUROPEAN_FONT) ,10 (BOLD_FONT)
Fontul implicit (0) este inclus in sistemul grafic.Fonturile speciale sunt
incluse in file de tip *.CHR (pointer spre fila de pe disc) si pot fi
incarcate in memorie,una cat una.Atunci cand solicitati un caracter spe-
cial,din alta fila decat cea incarcata in memorie,trebuie sa incarcati de
pe disc fila *.CHR care o contine(sau sa realizati un link la fila respec-
tiva).Directia de scriere a textului poate fi orizontala 0 (HORIZ_DIR),
sau verticala 1 (VERT_DIR).
Dimensiunea implicita a caracterelor este de 8x8 pixeli (fiecare bit din
definitia de 8x8 corespunde unui pixel).Daca se utilizeaza parametrul
charsize cu valoarea 1,textul va fi afisat la dimensiunea implicita.Daca
se utilizeaza pentru charsize valoarea 2,se vor utiliza cate doi pixeli
pentru fiecare bit din definitie (adica 8*2x8*2 deci 16x16),pentru 3 se
vor utiliza cate trei pixeli/bit,etc.Valoarea maxima pentru charsize este
10.Functia nu returneaza valori (nu este depanabila automat).
-252- [ graphics.h -setusercharsize() ]
EXEMPLU: #include
#include
int *drv,*mod,x;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=1;x<11;x++)
{ setcolor(x);
settextstyle(x,0,11-x);
outtextxy(100,100,"Romania");
sleep(2);
cleardevice(); }
sleep(2); }
FUNCTIA setusercharsize()
-seteaza dimensiunile caracterelor dupa dorinta utilizatorului
SINTAXA GENERALA este:
void far setusercharsize(int multx,int divx,int multy,int divy);
unde: multx si multy amplifica dimensiunea pe orizontala (x) sau pe
verticala (y),iar divx si divy micsoreaza dimensiunea orizontala
(x) sau respectiv verticala (y).
Functia ofera utilizatorului controlul complet asupra dimensiunii fie-
carui caracter utilizat in modul grafic.Valoarea finala a dimensiunii se
raporteaza la cea implicita,pentru fonturile setate cu settextstyle().
Parametrii multx si divx afecteaza dimensiunea pe orizontala iar multy si
divy cea verticala.Un caracter poate fi si marit si micsorat in acelasi
timp.Astfel,de exemplu,daca multy=3 si divy=2,inaltimea caracterului va
fi de 3/2 din cea initiala (adica 150 %).
Functia nu returneaza valori (nu este depanabila automat).
EXEMPLU: #include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
settextstyle(3,0,3);
outtextxy(100,0,"Normal");
setusercharsize(1,3,1,3);
outtextxy(100,50,"Micsorat de trei ori");
setusercharsize(3,1,1,1);
outtextxy(100,100,"Largit de trei ori");
setusercharsize(4,1,4,1);
outtextxy(100,200,"Marit de patru ori");
setusercharsize(1,1,3,1);
outtextxy(100,350,"Inaltat de trei ori");
sleep(5); }
Se pot utiliza si factori de marire mai mari de 10,dar trebuie sa veri-
ficati daca textul rezultat incape pe ecran(eventual pentru a reprezenta
litere izolate).Fiecare apelare a functiei se va raporta la valoarea
implicita a fonturilor (nu la cea anterioara apelului).
-253- [ setviewport()-setvisualpage() ]
FUNCTIA setviewport()
-reseteaza regiunea grafica activa
SINTAXA GENERALA este:
void far setviewport(int left,int top,int right,int bottom,int clip);
unde: left,top,right si bottom sunt coordonatele pentru colturile regiunii
active selectate iar clip este o constanta ce determina daca desenele si
aplicatiile grafice vor fi sau nu vor fi trunchiate la afisarea pe ecran.
Dupa resetarea regiunii grafice active,cursorul se deplaseaza automat la
pozitia (0,0) din noua fereastra specificata.
Functia se utilizeaza pentru a reseta regiunea grafica activa de pe ecran
(regiunea grafica activa implicita cuprinde tot ecranul).Dupa apelarea
functiei,regiunea grafica va fi activa doar in patrulaterul descris prin
coordonatele specificate.Daca clip este zero,desenele vor fi afisate asa
cum sunt definite,iar daca clip are o valoare diferita de zero,toate de-
senele si aplicatiile grafice(inclusiv textele) vor fi trunchiate la
limita regiunii grafice active.Stergerea ecranului in regiunea grafic
activa se face cu functia clearviewport().Functia nu returneaza valori.
Daca parametrii transferati sunt invalizi,functia graphresult() returneaza
-11 iar regiunea grafica activa ramane nemodificata.
EXEMPLU: #include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
outtext("Zona grafica activa");
rectangle(100,100,200,200);
setviewport(100,100,200,200,0);
setcolor(14);
bar3d(30,30,130,55,20,10);
setcolor(3);
line(10,10,190,190);
outtextxy(10,90,"TEXT IN ZONA GRAFICA ACTIVA");
sleep(3);
clearviewport();
outtext("zona activa");
circle(30,30,20);
sleep(3); }
FUNCTIA setvisualpage()
-afiseaza pe ecran pagina grafica specificata
SINTAXA GENERALA este:
void far setvisualpage(int page);
Functia afiseaza pe ecran o pagina grafica (preluata anterior cu functia
setactivepage() )
Functia este aplicabila doar pentru dispozitivele grafice care accepta
Dostları ilə paylaş: |
|
|