Limbajul c si C++ abc-doar


-214- [graphics.h - getdefaultpalette() ]



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

-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);

Yüklə 4,6 Mb.

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