Programele folosesc librarii grafice pentru a desena folosind driverele care au rolul de “a contacta” partea hardware.
Windows CE nu suporta GDI si unele metode complexe pentru desenare (2-D, 3-D). Toate metodele destinate graficii in .Net Compact Framework sunt continute intr-o librarie numita COREDLL.DLL.
Cu ajutorul acestor metode, se poate scrie cod pentru dispozitive cu ecrane de rezolutie inalta.
Functiile grafice se impart in 3 categorii:
Text
Functiile importante din aceasta categorie au fost analizate in articolul Text si font-uri.
Raster (cadru)
Lucrul cu functiile grafice din familia “raster” implica vectorii de pixeli (bitmap sau image).
Metoda DrawImage
Metoda deseneaza un obiect bitmap pe display sau pe suprafata unui alt biptmap.
Metoda Clear
Accepta ca valoare o culoare pe care o foloseste pentru a desena intreaga suprafata a ferestrei sau a obiectului bitmap.
Exemplu:
//cream un obiect bipmap Bitmap bitmap = new Bitmap(100, 100); //cream un obiect graohics pentru bitmap Graphics gbmp = Graphics.FromImage(bitmap); //stergem fundalul bitmap-ului gbmp.Clear(Color.LightGreen); //cream un obiect Graphics pentru forma Graphics graphics = this.CreateGraphics(); //copiem imaginea bitmap la o anumita locatie graphics.DrawImage(bitmap,100,100); //eliberam din memorie obiectele dupa folosire graphics.Dispose(); gbmp.Dispose(); bitmap.Dispose();
Metoda DrawIcon
Metoda va desena un obiect icon intr-o locatie specificata. Avantajul unui astfel de obiect este ca permite ca portiuni din spatele icon sa fie afisate. Deazavntaj: sunt mai mari si mai greu de desenat.
Metoda FillRegion
Exemplu:
Deseneaza o regiune (un set de dreptunghiuri unite de operatii de tip boolean) cu o culoare care va fi specificata in obiectul brush.
Brush b = new SolidBrush(Color.Red); //creeaza dreptunghiul pentru regiune Rectangle r1 = new Rectangle(0, 0, 10, 10); //creeaza regiunea pentru umplere Region region = new Region(r1); e.Graphics.FillRegion(b,region);
Vector
Functiile grafice de acest tip suporta desenerea figurilor geometrice : elipse, dreptunghiuiri, poligoane. Toate acestea se vor construi folosind un obiect de tip pen pentru desenarea conturului si un obiect de tip brush pentru desenarea interiorului figurii geometrice.
Metodele a caror nume incep cu Draw folosesc un obiect de tip Pen pentru a desena conturul, fara afectarea spatiului din interior. Exista patru metode de tip “line-drawing” (DrawRectangle, DrawPolygon, DrawEllipse, DrawLine).
O modalitate de apelarea a obiectului Graphics este argumentul de tip PaintEventArgs al metodei Paint apelate la evenimentul Paint al formei.
Exemplu:
//metoda Paint private void Form1_Paint(object sender, PaintEventArgs e) { //creem un obiect pentru desenarea conturului formei,culoare prin specificarea numelui Pen p = new Pen(Color.Red); //apelam metoda cu ajutorul parametrului de tip PaintEventArgs e.Graphics.DrawRectangle(p,new Rectangle(0,0,100,100)); }
In acelasi mod se pot apela alte metode pentru desenare:
Exemplu DrawPolygon:
//specificam culoarea dand valorile RGB Pen p3 = new Pen(Color.FromArgb(0, 34, 102)); //punctele poligonului Point point1 = new Point(50, 50); Point point2 = new Point(100, 25); Point point3 = new Point(200, 5); Point point4 = new Point(250, 50); Point point5 = new Point(300, 100); Point point6 = new Point(350, 200); Point point7 = new Point(250, 250); //vector de tip Point, care va fi transmis metodei DrawPolygon Point[] poligon = new[] { point1, point2, point3, point4, point5, point6, point7 }; //apelam metode pentru desenarea unui poligon e.Graphics.DrawPolygon(p3, poligon);
Exemplu DrawLine:
//specificam una din culorile system Pen p2 = new Pen(SystemColors.InactiveBorder); //deseneaza o linie prin conectarea a doua puncte e.Graphics.DrawLine(p2,105,105,130,130);
Exemplu DrawEllipse:
Pen p4 = new Pen(Color.ForestGreen);
e.Graphics.DrawEllipse(p4, 23, 30, 40, 40);
Metodele a caror nume incepe cu Fill, folosesc un obiect de tip Brush pentru desenarea spatiului din interiorul conturului. Exista 3 astfel de metode: FillRectangle, FillPolygon, FillEllipse. Acestea sunt metode complementare celor prezentate mai sus.
Daca vom pastra coordonatele punctelor din exemplele de mai sus, desenele se vor suprapune, in asa fel incat va rezulta, de exemplu un dreptunghi avand culoarea conturului data de obiectul de tip Pen si culoarea din interior data de obiectul de tip Brush.
Exemplu metoda FillRectangle:
//creem un obiect pentru desenearea spatiului interior Brush b = new SolidBrush(Color.BlueViolet); e.Graphics.FillRectangle(b, new Rectangle(0, 0, 100, 100));
Exemplu metoda FillPolygon:
Brush b3 = new SolidBrush(Color.FromArgb(125, 125, 125));
e.Graphics.FillPolygon(b3,poligon);
Exemplu metoda FillEllipse:
Brush b4 = new SolidBrush(Color.FloralWhite);
e.Graphics.FillEllipse(b4,23,30,40,40);
In .Net CF un singur spatiu de nume este destinat claselor grafice si anume, System.Drawing.
.Net Framework aloca 5 spatii de nume pentru lucrul cu grafica, (244 metode si 18 proprietati) in timp ce .Net Compact Framework contine doar elemente primare pentru desenare (26 de metode si 2 proprietati).
Pentru imbunatatirea vitezei de lucru se recomanda crearea doar unui singur obiect Graphics sau folosirea unui obiect de tip PaintEventArgs. De asemenea, incercati sa redesenati doar partile care au fost schimbate si nu desenati din nou toata imaginea.
Urmatoarele articole vor fi dedicate celor mai folosite controale din .Net Compact Framework.
Pingback/Trackback
Tweets that mention Lucrul cu Graphics in .Net Compact Framework - -- Topsy.com