Limbajul c si C++ abc-doar


lic(cel din paranteze).Daca parametrul specificat este invalid,functia



Yüklə 4,6 Mb.
səhifə34/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   30   31   32   33   34   35   36   37   ...   55

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

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   30   31   32   33   34   35   36   37   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin