Placa grafică sau adaptorul de ecran este componenta hard a calculatorului care asigură gestiunea memoriei şi controlul monitorului video. Driver-ul grafic este componenta soft-ului care comandă placa grafică. Placa grafică tratează ecranul în două moduri:
În regimul text fiecare caracter ce apare la ecran este păstrat în memoria calculatorului în doi octeţi, unul cuprinde codul ASCII al caracterului, iar al doilea culorile, iluminarea, culoarea fonului şi clipirea. În regimul grafic memoria ecranului are un cod pentru fiecare pixel prin care se determină culoarea pixelui.
Zona de memorie ecran pentru memorarea unui ecran se numeşte pagină video. Pagina video care apare la un moment dat pe ecran se numeşte pagină vizibilă. Prelucrarea informaţiei grafice în Pascal este susţinută de modulul Graph.
Modulul Graph pune la dispoziţie circa 90 de proceduri şi funcţii păstrate în fişierul graph.tpu. Utilizarea procedurilor şi funcţiilor grafice este posibilă dacă în partea declarativă uses vom declara modulul graph. Fiecare regim grafic are driver-ul său specific. Tabelul următor conţine lista regimurilor grafice posibile pentru diferite adaptoare grafice. În prima coloniţă sunt indicare tipurile de drivere, în a doua – numărul de pixeli de pe ecran, în coloniţa a treia este indicată palitra de culori a regimului dat, în ultima coloniţă sunt indicate numărul de pagini video care se pot încărca simultan în memoria videoadaptorului.
Orice program Turbo Pascal ce conţine prelucrarea informaţiei grafice trebuie să cuprindă:
Iniţializarea regimului grafic se relizează prin procedura InitGraph cu formatul:
InitGraph(var GraphDriver:integer; {tipul adaptorului}
var GraphMode:integer; {regimul grafic}
var DriverPath:string); {calea spre driver}
De exemplu:
procedure ini;
var gd, gm:integer;
begin
gd:=detect;
initgraph(gd,gm,’c:\tp\bgi’);
if graphresult<>grok then halt(1);
end;
2. Detecţia rezoluţiei
Funcţia GetMaxX întoarce un numar întreg reprezentând numărul maxim de pixeli (rezoluţia), după direcţia orizontală.
Function GetMaxX:integer;
Funcţia GetMaxY determină numărul maxim de pixeli (rezoluţia), dupa direcţia verticală.
Function GetMaxY:integer;
Funcţia GetMaxColor determină numărul maxim de culori cu care se poate desena pe ecran. În mod convenţional, “culoarea” 0 este cea neagră, astfel încât numărul de culori “de lucru” se află în gama 1..GetMaxColor.
Function GetMaxColor:word;
Cele 3 funcţii sunt necesare pentru scrierea de programe ce folosesc modul grafic şi care pot rula pe orice calculator, indiferent de tipul monitorului şi a placii grafice.
3. Ecranul în modul grafic
Dimensiunea unui element de imagine (pixel) pe direcţia orizontală diferă, în general, de dimensiunea lui pe verticală. Doar adaptoarele mai noi (cum ar fi VGA, VESA) consideră pixelul că având dimensiunile egale pe cele două direcţii.
Raportul între dimensiunea pe orizontală şi dimensiunea pe verticală a unui pixel se numeşte “aspect ratio” (factor/raport de forma).
Procedura prin care se poate afla factorul de forma este GetAspectRatio.
PROCEDURE GetAspectRatio(Var xasp,yasp:word );
Parametrii xasp şi yasp reprezintă numărul de pixeli pe direcţie orizontală şi verticală necesari pentru a obţine o dimensiune “reală”.
Procedura complementară cu GetAspectRatio este SetAspectRatio, ce modifică factorul de forma la valorile dorite. Parametrii xasp, yasp au semificaţie identică cu cei ce apar în procedura GetAspectRatio.
Function SetAspectRatio(xasp,yasp:word):word;
4. Noţiunea de cursor grafic
O noţiune specifică modului grafic este cursorul grafic sau “curent pointer”, notat CP. El este similar cu conceptul de cursor din modul text, dar, spre deosebire de acesta, cursorul este invizibil în mod grafic. Poziţia acestui cursor este importantă la trasarea liniilor, scrierea de text etc.
Pentru a determina poziţia curentă a cursorului grafic se folosesc funcţiile GetX pentru coordonata orizontală şi GetY pentru coordonata verticală.