|
-214- [graphics.h - getdefaultpalette() ]
|
səhifə | 30/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| -214- [graphics.h - getdefaultpalette() ]
FUNCTIA getdefaultpalette()
-selecteaza paleta grafica aflata in uz
SINTAXA GENERALA este: struct palettetype *far getdefaultpalette(void);
unde: palettetype este o structura definita in graphics.h cu forma gene-
rala: struct palettetype { unsigned char size;
signed char colors[MAXCOLORS+1] };
Structura palettetype contine informatii despre paleta grafica utilizata
de driver-ul curent si este apelata de functiile getpalette,setpalette si
setallpalette.
Functia getpalette() selecteaza structura de tipul palettetype in care
sunt arhivate datele despre palteta grafica instalata(cea in uz) in pro-
cesul declansat de initgraph().
Functia returneaza un pointer spre paleta grafica initializata de
catre initgraph().
EXEMPLU: #include
#include
#include
int *drv,*mod,n;
struct palettetype far *optiuni;
main()
{
drv=DETECT;
initgraph(drv,mod,"");
optiuni=getdefaultpalette();
printf("paleta grafica implicita este: \n");
afisaj();
setpalette(7,10);
setpalette(10,0);
getpalette(optiuni);
printf("paleta actuala este: \n");
afisaj();
}
afisaj()
{ for(n=0;n<16;n++)
{ printf("culoarea[%d] este: %d \n",n,optiuni->colors[n]);
sleep(1); }
}
Functia se utilizeaza pentru a putea reinstala paleta grafica implicita
dupa ce a fost inlocuita de o alta paleta grafica,sau pentru a modifica
paleta grafica initiala cu ajutorul functiei setpalette().
FUNCTIA getdrivername()
-afiseaza numele rutinei grafice instalate (driver-ul)
SINTAXA GENERALA este: char *far getdrivername(void);
Dupa initializarea modului grafic cu initgraph(),functia returneaza numele
rutinei grafice instalate (numele driver-ului grafic).
Functia returneaza un pointer spre un sir de caractere ce contine numele
driver-ului grafic instalat.
Valoarea returnata este identica cu cea detectata automat in cazul in
care initializarea s-a facut cu optiunea DETECT,sau respectiv contine
numele specificat expres de catre utilizator ca parametru al initgraph().
-215- [ graphics.h -getfillpattern() ]
EXEMPLU: #include
#include
int *drv,*mod;
char far *nume;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
nume=getdrivername();
printf("Rutina grafica instalata este: %s \n",nume);
printf("Apasati orice tasta: \n\n");
getch();
}
FUNCTIA getfillpattern()
-copiaza definitia modelului grafic intr-o arie de 8 bytes
SINTAXA GENERALA este: void far getfillpattern(char far *pattern);
Functia copiaza intr-o arie de caractere cu lungimea de 8 bytes modelul
grafic spre care pointeaza pointerul *pattern care este un pointer spre
o secventa de 8 bytes fiecare dintre ei continand definitia grafica pentru
8 pixeli.Atunci cand unul dintre cei 8 biti ai fiecarui byte este setat
la 1(o valoare pozitiva),pixelul corespunzator va fi reprezentat grafic
in culoarea selectata.
(Exemplu: char unu[8]={0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11} )
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
int *drv,*mod;
char pattern[8]={ 0x80,0x70,0x20,0x27,0x00,0x24,0x07,0x77};
char model[8];
main()
{ drv=DETECT;
initgraph(drv,mod,"");
setfillpattern(pattern,2);
floodfill(10,10,2);
sleep(2);
cleardevice();
getfillpattern(model);
model[0]=0x00;
model[4]=0x55;
model[7]=0x00;
setfillpattern(model,4);
floodfill(10,10,5);
sleep(3);
}
In exemplul de mai sus,am definit si setat un model grafic,apoi am preluat
modelul grafic cu functia getfillpattern() si am modificat definitia
pentru trei bytes( model[0],model[4],model[7] ) dupa care a resetat model-
ul grafic intr-o alta culoare.
Functia se utilizeaza pentru selectarea modelului grafic dorit la repre-
zentarile grafice(modelul de umplere al figurilor) sau la jocurile de
desene animate (vezi Mario,SuperMario) etc.
-216- [ getfillsettings()-getgraphmode() ]
FUNCTIA getfillsettings()
-arhiveaza in structura filsettingstype informatii despre modelul grafic
SINTAXA GENERALA este:
void far getfillsettings(struct fillsettingstype far *fillinfo);
unde: fillinfo este pointerul spre structura de tip fillsettingstype care
este predefinita in graphics.h cu forma generala:
struct fillsettingstype {
int pattern;
int color;
}
Functia citeste modelul grafic al penitei(pattern) si respectiv culoarea
si le arhiveaza in structura fillinfo sub forma de cod numeric (0-12 pt.
pattern si 0-15 pentru color) (vezi Fill Patterns si COLOR).
Exista 11 modeluri grafice predefinite si respectiv codul 12 pentru cele
definite de catre utilizator.
Modelul grafic al penitei poate fi utilizat pentru functiile:bar(),bar3d()
fillpoly(),pieslice() sau pentru a umple arii de ecran dar nu poate fi
utilizata pentru circle(),ellipse() etc.
EXEMPLU: #include
#include
int *drv,*mod;
char model[8]={0x00,0x10,0x20,0x00,0x10,0x20,0x10,0x00};
struct fillsettingstype info;
char model2[8]={0x55,0x55,0x00,0x00,0x70,0x70,0x00,0x11};
main()
{ drv=DETECT;
initgraph(drv,mod,"");
setfillpattern(model,9);
floodfill(10,10,3);
sleep(2);
getfillsettings(&info);
setfillpattern(model2,4);
floodfill(10,10,2);
sleep(2);
cleardevice();
printf("modelul grafic initial a fost: %d \n",info.pattern);
printf("afisat in culoarea: %d \n",info.color);
sleep(4);
}
FUNCTIA getgraphmode()
-returneaza modul grafic al ecranului (doar dupa initializare)
SINTAXA GENERALA este: int far getgraphmode(void);
Functia returneaza modul grafic al ecranului initializat de catre functia
initgraph.Valoarea returnata este cea predefinita in modul grafic din
graphics.h (vezi graphics_modes).
Functia se utilizeaza pentru a identifica modul grafic actual instalat fie
prin initgraph() fie prin setgraphmode() si returneaza valoarea setata.
Pentru a apela functia este necesar ca modul grafic sa fi fost ini-
tializat corect (nu se poate apela pentru a returna modul grafic necesar
functiei de initializare corecta).
-217- [ graphics.h -getimage ]
EXEMPLU: #include
#include
#include
int *drv,*mod,cod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
cod=getgraphmode();
printf("Modul grafic instalat este: %d \n",cod);
sleep(3); }
FUNCTIA getimage()
-copiaza in memorie un fragment de imagine de pe ecran (pixel cu pixel)
SINTAXA GENERALA este:
void far getimage(int left,int top,int right,int bottom,void far *bitmap);
unde: left,top,right si bottom sunt coordonatele colturilor stanga sus si
dreapta jos ale fragmentului de ecran ce va fi copiat in memorie,iar
bitmap este pointerul spre tamponul de memorie care va prelua datele
Pentru ca sa fiti siguri ca imaginea copiata are loc in tamponul de
memorie specificat,este util sa utilizati functiile imagesize() si res-
pectiv malloc(),deoarece in cazul in care preluarea imaginii nu se face
corect,riscati sa initializati o bucla infinita intre pointer si adresa
de memorie care va genera un program defectiv.Pentru si mai multa sigu-
ranta este bine sa asociati si o rutina de tratare a erorilor.
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
#include
int *drv,*mod;
int a1,a2,a3,a4,b1,b2,x;
char *tampon;
unsigned size;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
circle(200,100,50);
bar3d(180,130,240,170,10,10);
a1=150,a2=100,a3=250,a4=200;
size=imagesize(a1,a2,a3,a4);
tampon=malloc(size);
if (!tampon) { exit(1); };
getimage(a1,a2,a3,a4,tampon);
sleep(3);
b1=50,b2=250;
printf("dimensiunea imaginii salvate este: %d \n",size);
for(x=1;x<6;x++)
{ putimage(b1+x*110,b2,tampon,0);
sleep(1); };
free(tampon); }
In exemplul de mai sus functia este aplicata impreuna cu putimage() pentru
a realiza un exemplu de animatie ca la jocurile grafice.
-218- [graphics.h -getlinesetting() ]
FUNCTIA getlinesettings()
-citeste si arhiveaza stilul,modelul si grosimea liniei penitei grafice
SINTAXA GENERALA este:
void far getlinesettings(struct linesettingstype far *lineinfo);
Functia citeste informatiile despre penita grafica si le arhiveaza intr-o
structura speciala de tip linesettingstype care este definita in fila
antet graphics.h cu forma generala:
struct linesettingstype { int linestyle;
unsigned upattern;
int thickness; };
unde: linestyle este stilul,pattern este modelul iar thickness este gro-
simea liniei desenate
Stilul liniei poate lua urmatoarele valori:
NUME VALOARE COD TIP
SOLID_LINE 0 linie neintrerupta
DOTTED_LINE 1 linie punctata
CENTER_LINE 2 linie centrata
DASHED_LINE 3 linie intarita
USERBIT_LINE 4 definita de utilizator
Modelul(pattern) se aplica doar in cazul in care se utilizeaza stilul 4
(definit de utilizator) si consta dintr-o definitie pe 16-biti(vezi si
setfillpattern).De exemplu linia neintrerupta are modelul 0xFFFF iar
linia intarita are modelul 0x3333 sau ox0F0F.Daca parametrul pentru stil
este diferit de 4,modelul pattern va trebui mentionat chiar daca va fi
ignorat la executia programului.
Grosimea liniei poate fi NORM_WIDTH cu valoarea de cod 1,formata din
puncte cu grosimea de 1 pixel sau THICK_WIDTH cu valoarea de cod 3 si
formata din puncte cu grosimea de 3 pixeli.
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
#include
#int *drv,*mod,x;
struct linesettingstype linie;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
for(x=0;x<4;x++)
{
setlinestyle(x,0,x);
bar3d(300,200,350,250,25,10);
getlinesettings(&linie);
printf("stilul liniei este: %d \n",linie.linestyle);
printf("grosimea liniei este: %d \n",linie.thickness);
sleep(3);
cleardevice();
sleep(1);
}
}
Exemplul demonstreaza trei stiluri si cele doua grosimi diferite ale
penitei grafice.
-219- [ getmaxcolor-getmaxmode-getmaxx ]
FUNCTIA getmaxcolor()
-returneaza numarul maxim de culori acceptat de driverul grafic instalat
SINTAXA GENERALA este: int far getmaxcolor(void);
Functia returneaza numarul maxim de culori acceptat de driverul grafic si
de modul ecran instalat si se utilizeaza pentru a afla valoarea maxima ce
poate fi transferata functiei setcolor(),atunci cand doriti sa schimbati
culoarea de scrieire sau cea de fond.De exemplu,256K EGA accepta maxim
15 culori (returneaza 15) iar CGA sau monitoarele monocrome Hercules pot
accepta maxim o singura culoare (functia returneaza 1).
Functia returneaza numarul maxim de culori acceptate.
EXEMPLU: #include
#include
#include
int *drv,*mod,midx,midy;
char culori[80];
main()
{ drv=DETECT;
initgraph(drv,mod,"");
printf("Numarul maxim de culori este: %d \n",getmaxcolor());
sprintf(culori,"Modul grafic suporta: 0...la...%d",getmaxcolor());
midx=getmaxx()/2;
midy=getmaxy()/2;
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,midy,culori);
sleep(5);
printf("Modul maxim al ecranului este: %d \n",getmaxmode());
sprintf(culori,"Modul ecran este: %d",getmaxmode());
outtextxy(300,300,culori);
sleep(5);
}
Exemplul contine doua moduri de returnare a informatiei obtinute.Pentru
exemplificarea functiei este suficienta prima linie printf().
FUNCTIA getmaxmode()
-returneaza numarul maxim de moduri grafice(palete grafice) permise de
driverul grafic instalat
SINTAXA GENERALA este: int far getmaxmode(void);
Functia returneaza numarul maxim de palete grafice(moduri grafice) accep-
tat de driverul grafic instalat.Versiunile Borland contin o functie simi-
lara denumita getmoderange() (neacceptata de celelalte versiuni).
Valoarea minima returnata este 0.
EXEMPLU: vezi mai sus (getmaxcolor)
FUNCTIA getmaxx()
-returneaza valoarea maxima Ox a ecranului(nr pixeli pe orizontala)
SINTAXA GENERALA este: int far getmaxx(void);
Functia returneaza valoarea lui x pentru driverul si modul grafic instalat
si reprezinta numarul maxim de pixeli pe axa Ox.De exemplu pentru CGA,in
modul grafic 320x200,getmaxx() returneaza valoarea 319.
Functia returneaza punctul maxim de coordonata Ox al ecranului(pixelul cel
mai exterior este utilizat pentru definirea ecranului).
-220- [ getmaxy() - getmodename() ]
EXEMPLU: #include
#include
#include
int *drv,*mod;
main()
{ drv=DETECT;
initgraph(drv,mod,"");
printf("Numarul maxim de pixeli pe orizontala: %d \n",getmaxx());
printf("Numarul maxim de pixeli pe verticala: %d \n\n",getmaxy());
printf("Ecranul contine in total: %d pixeli",getmaxx()*getmaxy());
sleep();
}
Functiile getmaxx() si getmaxy() se utilizeaza foarte mult in grafica
pentru a orienta pozitionarea unui grafic sau desen in functie de coor-
donatele ecranului.De exemplu,pentru ca un cerc sa fie desenat in centrul
ecranului se vor utiliza coordonatele getmaxx()/2 si getmaxy()/2.
FUNCTIA getmaxy()
-returneaza valoarea maxima pentru y (numarul de pixeli pe verticala)
SINTAXA GENERALA este: int far getmaxy(void);
Functia returneaza pentru driverul grafic si modul grafic instalat,va-
loarea maxima a axei Oy,respectiv numarul maxim de pixeli pe verticala
ecranului.De exemplu,pentru CGA in modul 320x200,functia getmaxy() va
returna 199 (ultimul pixel este utilizat pentru definirea ecranului si
nu poate fi adresat in cadrul functiilor grafice).
Functia returneaza valoarea maxima a coordonatei Oy a ecranului.
EXEMPLU: vezi mai sus (getmaxx() si getmaxcolor()
FUNCTIA getmodename()
-returneaza denumirea modului grafic instalat
SINTAXA GENERALA este: char *far getmodename(int mode_number);
Functia accepta valoarea de cod a modului grafic(obtinuta cu getgraphmode)
si returneaza denumirea modului grafic instalat.Functia este utila pentru
aplicatiile care afiseaza statusul sau caracteristicile ecranului,etc.
Functia returneaza un pointer spre sirul care contine denumirea arhivata.
EXEMPLU: #include
#include
#include
int *drv,*mod,numar;
char nume[80];
main()
{
drv=DETECT;
initgraph(drv,mod,"");
numar=getgraphmode();
sprintf(nume,getmodename(numar));
printf("Modul ecran este: %s",nume);
sleep(5);
}
Functia se poate utiliza si pentru a afisa rezolutia ecranului (numarul
de pixeli pe cele doua coordonate/ pentru depanarea aplicatiilor grafice).
-221- [ getmoderange()-getpalette() ]
FUNCTIA getmoderange()
-arhiveaza domeniul modurilor grafice pentru driverul grafic instalat
SINTAXA GENERALA este:
void far getmoderange(int graphdriver,int far *lomode,int far *himode);
unde: graphdriver este driverul grafic instalat,lomode este modul grafic
cel mai mic iar himode este modul grafic cel mai mare.Functia se poate
utiliza pentru a afla domeniul de valori ce pot fi utilizate pentru
setarea modului grafic.Daca driverul grafic specificat este invalid sau
inexistent,ambele valori arhivate vor fi egale cu -1,iar daca driverul
grafic specificat are valoarea -1,atunci functia va arhiva valorile
lomode si himode pentru driverul grafic instalat(cel actual).
Functia nu returneaza nici o valoare.
EXEMPLU: #include
#include
#include
int drv=DETECT;
int *mod,high,low,x;
main()
{ initgraph(&drv,mod,"");
getmoderange(drv,&low,&high);
printf("Placa grafica accepta urmatoarele moduri grafice: \n");
printf(" low=%d si high=%d \n\n",low,high);
sleep(2);
printf("alte variante posibile sunt: \n\n");
for (x=0;x<11;x++)
{ getmoderange(x,&low,&high);
printf("modul=%d low=%d high=%d \n",x,low,high);
sleep(1);
}
sleep(3);
}
FUNCTIA getpalette()
-arhiveaza date despre paleta grafica intr-o structura
SINTAXA GENERALA este:
void far getpalette(struct palettetype far *palette);
Functia citeste informatiile despre paleta grafica a modului ecran activ
si le arhiveaza intr-o structura speciala de tip palettetype care este
predefinita in graphics.h cu forma generala:
struct palettetype { unsigned char size;
signed char colors[MAXCOLORS + 1];
}
unde size este dimensiunea paletei(numarul de intrari=culori),colors este
o arie de memorie care contine un numar de adrese egal cu numarul maxim
de culori acceptate de modul grafic si arhivate in graphics.h in constanta
MAXCOLORS.Practic aria colors[] contine un numar de bytes egal cu numarul
de culori,respectiv egal cu numarul returnat de size.
Functia getpalette() nu poate fi apelata in cazul driverului IBM-8514,
(care permite un numar de 256 de culori)
Functia nu returneaza nici o valoare.
Se utilizeaza pentru setarea sau resetarea paletei de culori.
-222- [ getpalletesize() - getpixel() ]
EXEMPLU: #include
#include
#include
int *drv,*mod,x;
struct palettetype date;
char nr[80],culori[80];
main()
{ drv=DETECT;
initgraph(drv,mod,"");
getpalette(&date);
sprintf(nr,"dimensiunea paletei este:%d intrari",date.size);
Dostları ilə paylaş: |
|
|