Limbajul c si C++ abc-doar


se gaseste fila cu driverul grafic.Daca pointerul *path este NULL,atunci



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

se gaseste fila cu driverul grafic.Daca pointerul *path este NULL,atunci

driverul grafic trebuie sa fie in directorul curent.Calea de acces este

apelata si de catre functia settextstyle() pentru a verifica filele care

contin caracterele speciale (*.CHR).

Driverul grafic se specifica prin codul sau numeric de tip int,care poate

fi: 0(DETECT=autodetectie), 1(CGA) ,2(MCGA) ,3(EGA) ,4(EGA64) ,5(EGAMONO)

6(IBM8514) ,7(HERCMONO) ,8(ATT400) ,9(VGA) ,10(PC3270)

Modul grafic(graphmode) se specifica tot prin codul numeric de tip int,

dupa cum urmeaza: CGA(0-4),MCGA(0-5),EGA(0-1),EGA64(0-1),EGAMONO(3),

HERCMONO(0),ATT400(0-5),VGA(0-2),PC3270(0),IBM8514(0-1)

Prin specificarea modului grafic se va determina paleta grafica utilizata

(dintre cele implicite),rezolutia ecranului si numarul de culori.Daca nu

stiti ce placa grafica utilizati,se recomanda sa utilizati doar varianta

de autodetectie a driverului grafic si a modului grafic.

Cele patru palete grafice implicite sunt: 0(LIGHTGREEN,LIGHTRED,YELLOW),

1(LIGHTCYAN,LIGHTMAGENTA,WHITE),2(GREEN,RED,BROWN),3(CYAN,MAGENTA,GRAY).

Rezolutia ecranului este determinata de driverul grafic si de modul grafic

selectat si poate fi intre 320x200(CGA,ATT400) si 640x480(MCGA,VGA,IBM)

sau chiar 1024x768 si 256 culori(IBM9514 mod 0).

Culorile pot fi 2(alb-negru),4(paletele implicite),16 sau chiar 256.

Rezolutia ecranului se refera la numarul total de linii si coloane,respec-

tiv la numarul total de puncte de pe ecran.Cu cat numarul total de linii

si coloane este mai mare,cu atat dimensiunea fiecarui punct va fi mai

mica,imaginile vor fi tot mai discriminative iar rezolutia se va spune ca

este mai mare.

Pentru orice valori,diferite de cele din tabele(cu exceptia DETECT),rezul-

tatul este inpredictibil.Nu incercati sa fortati drivere grafice care nu

sunt compatibile cu versiunea d-voastra de C.In C++ si mai ales in Visual

C++,functiile grafice din biblioteca API beneficiaza de toate resursele

grafice ale sistemului Windows (inclusiv numarul de culori).Nu incercati

sa fortati accesul la resurse,atunci cand nu stiti exact ce rezultat ob-

tineti,deoarece riscati sa dereglati complet sistemul de afisaj.


-231- [ graphics.h-installuserdriver() ]

EXEMPLU: #include

#include

int drv,mod;

main()

{ drv=0;

initgraph(&drv,&mod,"");

printf("driverul grafic implicit(autodetectat)");

bar3d(50,50,200,90,10,10);

sleep(3);

closegraph();

drv=1;

initgraph(&drv,&mod,"");

printf("driverul grafic color CGA ");

bar3d(50,50,200,90,10,10);

sleep(3);

}
FUNCTIA installuserdriver()

-permite adaugarea unui driver grafic in tabela interna BGI

SINTAXA GENERALA este:

int far installuserdriver(char far *name,int huge(*detect)(void));

Functia va permite sa adaugati in tabela interna a BGI,driverul grafic

oferit de catre producator impreuna cu placa grafica.Parametrul *name

specifica numele filei care contine driverul grafic iar *detect este un

pointer optional care poate autodetecta functiile ce acompaniaza noul

driver(nu accepta parametri si returneaza o valoare de tip int).

Exista doua moduri in care puteti adauga driverul producatorului.Exemplu:

daca achizitionati o plaga grafica tip Spiffy Graphics Array(SGA) impreuna

cu driverul sau de tip BGI intitulat SGA.BGI,cel mai usor mod de a utiliza

acest driver este sa apelati installuserdriver() si apoi se utilizati

valoarea returnata pentru initializarea cu initgraph().Al doilea mod po-

sibil este prin crearea unui link intre driverul grafic si o functie de

autodetectie care urmeaza sa fie inclusa in functia de initializare(adica

initgraph() apeleaza autodetectia care este linkata cu driverul grafic).

De obicei functia de autodetectie este furnizata de catre producator.

In cazul in care includeti o functie de autodetectie pentru driverul

grafic si functia initgraph() nu detecteaza placa grafica respectiva,

functia va returna codul de eroare -11(grError) si va autodetecta automat

driverul si modul grafic accesibil.Daca functia detecteaza atat driverul

cat si placa grafica,returneaza o valoare pozitiva si incarca in memorie

driverul grafic specificat(SGA.BGI in exemplul de mai sus).

In acest mod puteti instala pana la 10 drivere grafice.

Functia returneaza o valoare de tip int care este codul numeric ce trebuie

utilizat impreuna cu functia initgraph() pentru a initializa modul grafic.

Este recomandabil sa utilizati exclusiv drivere grafice produse de catre

firma care furnizeaza placa grafica,sau drivere grafice bine verificate

si functii de autodetectie standardizate.Daca scrieti singuri functiile

de autodetectie,riscati sa creati bucle infinite intre autodetectia placii

dorite de d-voastra si autodetectia impicita din functia initgraph().

Daca sunteti incepator,este mai bine sa apelati la un specialist atunci

cand instalati placi sau drivere pentru componentele hardware.


-232- [ installuserfont() si line() ]

EXEMPLU: #include

#include

int nr,err;

int mod;

char *placa="SVGA";

main()

{

nr=installuserdriver(placa,DETECT);

initgraph(&nr,&mod,"");

err=graphresult();

printf("Placa grafica instalata este: %s cod %d \n",placa,nr);

print("Numar eroare= %d \n",err);

sleep(3);

}
FUNCTIA installuserfont()

-apeleaza o fila cu caractere speciale din directorul curent

SINTAXA GENERALA este: int far installuserfont(char far *name);

Functia se utilizeaza pentru a incarca in memorie o fila din directorul

curent (nu se accepta o alta cale de acces la fila) care contine caractere

speciale utilizate pentru fonturile grafice din modul grafic.

Se pot instala astfel concomitent maximum 20 de file diferite(20 de tipuri

de fonturi grafice).

Valoarea returnata este un numar de cod de tip int care va putea fi uti-

lizat in continuare pentru apelarea fonturilor cu ajutorul functiei

settextstyle().Daca tabela interna de fonturi este plina cu fonturile

implicite (vezi functia settextstyle() ) se va returna valoarea de eroare

-11 (grError).

EXEMPLU: #include

#include

#include

int *drv,*mod,nr;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

nr=installuserfont("TRIPLEX_FONT.CHR");

settextstyle(nr,0,5);

outtextxy(100,100,"EXEMPLUL NUMARUL 1");

printf("numarul fontului utilizat este: %d \n",nr);

sleep(3);

}
FUNCTIA line()

-deseneaza o linie in culoarea,stilul si grosimea specificata

SINTAXA GENERALA este: void far line(int x1,int y1,int x2,int y2);

unde: x1,y1 si respectiv x2,y2 sunt coordonatele celor doua puncte extre-

me intre care se traseaza linia.

Functia traseaza o linie intre cele doua puncte specificate,in culoarea,

stilul si cu grosimea actuala a penitei grafice.Dupa trasarea liniei,

pozitia cursorului un este actualizata (revine la pozitia de start).

Nu returneaza nici o valoare.


-233- [ graphics.h - linerel() ]

EXEMPLUL 1: #include

#include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

setcolor(3);

line(10,10,50,50;

outtext("linia 1 ");

sleep(1);

line(100,200,400,30);

outtext("linia 2");

sleep(3);

}

Liniile trasate se pot combina pentru a realiza grafice,inagini geometrice

sau aleatorii:

EXEMPLUL 2: #include

#include

#include

int *drv,*mod,y,z;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

randomize();

for(y=1;y<10;y++)

{ for(z=1;z<50;z++)

{ setcolor(random(15));

line(random(600),random(450),random(600),random(450));};

sleep(1);

cleardevice(); }

}
FUNCTIA linerel()

-deseneaza o linie la distanta indicata si deplaseaza pozitia cursorului

SINTAXA GENERALA este: void far linerel(int dx,int dy);

Functia traseaza o linie intre pozitia actuala a cursorului si punctul

situat la distanta dx(orizontala) si dy(verticala).Pozitia cursorului este

deplasta cu dx si dy.Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

linerel(500,325);

sleep(2);

linerel(-400,-150);

sleep(2);

linerel(50,-75);

sleep(3); }

Functia traseaza linii,relativ la pozitia curenta a cursorului.


-234- [ lineto() si moverel() ]

FUNCTIA lineto()

-deseneaza o linie intre pozitia cursorului si punctul indicat

SINTAXA GENERALA este: void far lineto(int x,int y);

Functia traseaza o linie intre pozitia curenta a cursorului si punctul

specificat prin coordonatele x si y (coordonatele ecranului) dupa care

deplaseaza cursorul in punctul specificat (x,y).Nu returneaza valori.

EXEMPLU: #include

#include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

lineto(100,100);

sleep(1);

setcolor(3);

lineto(100,200);

lineto(400,200);

lineto(400,100);

lineto(100,100);

sleep(2);

floodfill(150,150,3);

sleep(3);

}
FUNCTIA moverel()

-deplaseaza cursorul la distanta specificata

SINTAXA GENERALA este: void far moverel(int dx,int dy);

Functia deplaseaza pozitia actuala a cursorului la distanta specificata

prin dx(orizontala) si dy(verticala).Distantele dx si dy sunt exprimate

in pixeli (coordonatele ecranului grafic).Nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int *drv,*mod,x,y,z,nr;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

randomize();

for(nr=1;nr<20;nr++)

{ x=random(600);

y=random(400);

z=random(14)+1;

setcolor(z);

moverel(x,y);

outtext("PING PONG");

moveto(0,0);

sleep(1);

}}

In exemplul de mai sus,toate deplasarile cursorului se fac relativ la

coltul din stanga sus al ecranului,deoarece am utilizat functia moveto()

pentru a readuce cursorul la zero (pentru a nu iesi din ecran).


-235- [ moveto() si outtext() ]

FUNCTIA moveto()

-deplaseaza cursorul la pozitia indicata

SINTAXA GENERALA este: void far moveto(int x,int y);

Functia deplaseaza cursorul la punctul din regiunea activa a ecranului

specificat prin coordonatele x si y (relative la regiunea activa).

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int *drv,*mod,x,y,z,nr1,nr2;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(nr1=1;nr1<10;nr1++)

{ for(nr2=1;nr2<800;nr2++)

{ x=random(600);

y=random(450);

z=random(14)+1;

setcolor(z);

moveto(x,y);

outtext("*");

};

sleep(2);

cleardevice(); }}
FUNCTIA outtext()

-afiseaza un sir de caractere la pozitia actuala a cursorului

SINTAXA GENERALA este: void far outtext(char far *textstring);

Functia afiseaza sirul de caractere specificat prin textstring,la pozitia

actuala a cursorului,utilizand fonturile,directia si dimensiunile curente.

Daca textul este ordonat prin LEFT_TEXT si cu directia HORIZ_DIR,atunci

cursorul se va deplasa la capatul sirului scris.In celelalte situatii,

pozitia cursorul revine la pozitia initiala.Coordonatele penitei grafice

sunt relative la regiunea activa a ecranului (implicit la intregul ecran).

Pentru a determina daca sirul specificat incape in intregime in regiunea

activa,se pot utiliza functiile textwidth() si texthight().Daca sirul

este scris cu fonturile implicite si este mai lung decat regiunea activa

a ecranului,sirul va fi trunchiat de toate caracterele pozitionate in

afara regiunii active.Functia outtext() este destinata pentru a scrie

caractere,exclusiv in modul grafic(nu in modul text).Nu returneaza valori.

EXEMPLU: #include

#include

int *drv,*mod,x;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<16;x++)

{ moveto(20*x,10*x);

outtext("ALO !");

sleep(1);

setcolor(x); }}


-236- [ outtextxy() si pieslice() ]

FUNCTIA outtextxy()

-afiseaza un sir de caractere la pozitia specificata

SINTAXA GENERALA este:

void far outtextxy(int x,int y,char far *textstring);

Functia afiseaza sirul de caractere specificat prin textstring la poxitia

indicata prin coordonatele de ecran x si y (relative la regiunea activa a

ecranului).Textul va fi afisat utilizand fonturile,directia si dimensiuni-

le curente.Pentru a verifica daca textul incape in intregime in regiunea

activa a ecranului se pot tiliza functiile textwidth() si textheight().

Toate caracterele amplasate in afara regiunii active a ecranului vor fi

trunchiate(regiunea activa implicita este egala cu tot ecranul).Functia

este activa doar in modul grafic,nu si in modul text.Nu returneaza valori.

EXEMPLU: #include

#include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

setcolor(10);

outtextxy(100,20,"TABEL 1");

outtextxy(250,20,"TABEL 2");

outtextxy(400,20,"TABEL 3");

setcolor(3);

outtextxy(100,40,"Valoare 1");

outtextxy(250,40,"Valoare 2");

outtextxy(400,40,"Valoare 3");

sleep(3); }
FUNCTIA pieslice()

-deseneaza segmente de cerc

SINTAXA GENERALA este:

void far pieslice(int x,int y,int stangle,int endangle,int radius);

Functia deseneaza si umple cu modelul penitei un segment de cerc cu

centrul situat la coordonatele x si y,incepand de la unghiul stangle si

pana la unghiul endangle si de raza radius.Segmenul este conturat in cu-

loarea penitei si umplut cu modelul grafic al penitei(vezi setfillstyle())

Unghiul de start si cel final sunt exprimate in grade (maxim 360).Sensul

de deplasare este inversul acelor de ceasornic cu zero grade la ora 3,90

de grade la ora 12,180 de grade la ora 9 etc.Nu returneaza valori.

EXEMPLU: #include

#include

#include

int *drv,*mod,x,y,z;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

randomize();

for(z=1;z<20;z++)

{ setfillstyle(random(10)+1,random(14)+1);

pieslice(300,220,random(360),random(360),random(200));

sleep(2); }}


-237- [ graphics.h- putimage() ]

FUNCTIA putimage()

-afiseaza pe ecran o imagine salvata anterior cu getimage()

SINTAXA GENERALA este:

void far putimage(int left,int top,void far *bitmap,int op);

Functia afiseaza pe ecran,la coordonatele left si top,o imagine salvata

anterior cu ajutorul functiei getimage().Imaginea va fi afista cu coltul

din stanga in pozitia specificata prin left si top.Parametrul op se uti-

lizeaza pentru a specifica un operator combinativ care va controla modul

de destinatie al fiecarui pixel din imaginea afisata prin compararea cu-

lorii fiecarui pixel cu cea a pixelului existent in acel moment pe ecran.

Se pot utiliza urmatoarele valori,predefinite in graphics.h:

NUME VALOARE DESCRIERE

COPY_PUT 0 Copy (copiaza identic)

XOR_PUT 1 Exclusive or (SAU exclusiv)

OR_PUT 2 Inclusive or (SAU inclusiv)

AND_PUT 3 And (si=inclusiv)

NOT_PUT 4 Copy the inverse of the source (invers)

Cu alte cuvinte,COPY_PUT copiaza imaginea sursa pe ecran,XOR_PUT aplica

operatorul XOR intre fiecare pixel din sursa si cel corespunzator de pe

ecran(compara SAU exclusiv sursa cu ecranul) etc.Nu returneaza valori.

EXEMPLU: #include

#include

#include

int *drv,*mod,x;

char *tampon;

unsigned size;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

setfillstyle(8,4);

setcolor(10);

circle(200,100,50);

circle(180,80,10);

circle(220,80,10);

bar3d(180,120,200,130,7,7);

floodfill(200,100,10);

size=imagesize(100,0,300,200);

tampon=malloc(size);

if (!tampon){ exit(1); };

getimage(100,0,300,200,tampon);

randomize();

cleardevice();

for(x=0;x<15;x++)

{ putimage(random(400),random(300),tampon,0);

sleep(1);

cleardevice();

}}

Pentru a verifica variantele parametrului optional (op) puteti umple

ecranul cu diferite imagini si repetati exercitiul dar cu alti parametri

(de exemplu 4).Functia se utilizeaza mai ales pentru a realiza grafica

animata,pentru anteturi si stampile,ferestre si icon-uri etc.


-238- [ graphics.h-putpixel(),rectangle()]

FUNCTIA putpixel()

-afiseaza pe ecran un pixel la pozitia si in culoarea specificata

SINTAXA GENERALA este: void far putpixel(int x,int y,int color);

Functia afiseaza un pixel la coordonatele x si y in culoarea color.

Nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int *drv,*mod;

int x,y,z;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

randomize();

for(x=1;x<16;x++)

{ for(y=1;y<20;y++)

{ putpixel(25*x,22*y,x);

putpixel(500-25*x,450-22*y,x); };

for(z=x+5;z<450;z++)

{ putpixel(z,3*x,x);

putpixel(3*x,z,x); };

sleep(1);

}

}

Functia va permite sa desenati fiecare pixel al ecranului.Nu ezitati sa

incercati,fie pixel cu pixel,fie utilizand functii iterative ca in exem-

plul de mai sus.Incercati sa faceti desene pe hartie cu patratele si apoi

sa le transcrieti pixel cu pixel pe ecran(poate ca in d-voastra se as-

cunde un viitor programator de jocuri PC),sau incercati sa realizati o

semnatura electronica,o stampila,un icon,un simbol grafic etc...
Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   28   29   30   31   32   33   34   35   ...   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