Documente Academic
Documente Profesional
Documente Cultură
Afişarea grafică
Subsistemul care tratează afişarea grafică se numeşte GDI+. GDI (Graphical Device
Interface) a fost modelul grafic din Windows începând cu Windows 3.0. De-a lungul timpului
acesta a fost mult îmbunătăţit pentru cadrul de lucru .NET, astfel explicându-se adăugarea
semnului (+). GDI+ oferă o bibliotecă de clase pentru efectuarea de operaţii grafice.
Funcţionalitatea interfeţei GDI+ se întinde peste mai multe spaţii de nume.
o System.Drawing – asigură funcţionalitatea de bază;
o System.Drawing.Drawing2D – pune la dispoziţie funcţii grafice bidimensionale şi
vectoriale mai avansate;
o System.Drawing.Imaging – asigură funcţionalitatea pentru prelucrarea de imagini;
o System.Drawing.Text – oferă funcţii tipografice suplimentare faţă de System.Drawing
o System.Drawing.Printing – tratează operaţiile de tipărire.
Clasa Descrierea
Bitmap Reprezintă un obiect bitmap. Această clasă poate lucra cu câteva
formate standard, printre care : BMP, GIF, şi JPG.
Brush Clasă care reprezintă “pensule” pentru umplerea interioarelor
diverselor forme.
Brushes O colecţie de pensoane.
Color Structură care reprezintă o culoare..
Font Reprezintă un font.
FontFamily Reprezintă o familie de fonturi.
Graphics Reprezintă o suprafaţă de desen.
Icon Reprezintă un obiect icon.
Image Clasă abstractă care stă la baza altor clase, printre care Bitmap şi
Metafile.
Pen Clasă ale cărei obiecte reprezintă “creioanele” folosite pentru
desenarea formelor şi contururilor.
Pens O colecţie de pensoane.
Point, PointF Clase folosite pentru reprezentarea punctelor ce au coordonatele
X,Y întregi sau în virgulă mobilă.
Rectangle, RectangleF Clase folosite pentru reprezentarea dreptunghiurilor (valori întregi
sau în virgulă mobilă).
Region Reprezintă o regiune (nu neapărat dreptunghiulară)
Clasa Descrierea
Size, SizeF Structurile de tip întreg sau în virgulă mobilă care reprezintă o
dimensiune.
SolidBrush O pensulă care utilizează o culoare pentru a umple formele.
StringFormat Încapsulează un set de informaţii de machetare a textelor, cum ar
fi: alinierea şi spaţierea liniilor.
TextureBrush O pensulă care utilizează o imagine pentru a umple formele.
Utilizarea culorilor
Exemple :
Color rosu = Color.FromArgb(255, 0, 0);//o culoare opaca
Color c = Color.FromArgb(110, 33, 66, 99);//o culoare semi-transparentă
Color rosu_semitransparent = Color.FromArgb(127, rosu.R, rosu.G, rosu.B); //o
culoare semitransparentă
Observaţie: Proprietăţile A,R,G şi B pot fi utilizate pentru a accesa componentele obiectului
Color.
Utilizarea fonturilor
Proprietăţi specifice
Nume Descriere
Bold Dă o valoare care indică dacă fontul are aplicat stilul bold.
Italic Dă o valoare care indică dacă fontul are aplicat stilul italic.
Strikeout Dă o valoare care indică dacă textul care va fi scris utilizând acest font este tăiat
cu o linie orizontală.
Underline Dă o valoare care indică dacă fontul are aplicat stilul underline.
Observație: Pentru a determina dimensiunile unui anumit text într-un context grafic se poate
folosi metoda MeasureString din clasa Graphics, ca in exemplul de mai jos:
Graphics g;
SizeF ms;
Font f;
...
Clasa Pen
Obiectele clasei Pen sunt utilizate pentru a reprezenta “creioanele” utilizate pentru
desenarea formelor şi contururilor. Obiectele Pen simple sunt create prin specificarea unei
lăţimi de linie (în pixeli) şi a unei culori.
Exemple:
Pen pen1=new Pen(Color.Black);//crează un creion negru cu laţimea prestabilită
de un pixel
Pen pen2=new Pen(Color.Red,2.0F);//crează un creion roşu cu laţimea de doi
pixeli
Se pot crea şi obiecte Pen mai avansate, specificând un argument Brush în loc de
Color. Astfel se pot umple liniile cu imagini sau modele.
Observaţie: Clasa Pens are proprietăţi care definesc peste 140 de creioane ce reprezintă gama
completă de culori definite de sistem. Fiecare dintre acestea are lăţimea de un pixel.
Obiecte Brush
Obiectele Brush sunt de mai multe feluri, toate provenind din clasa de bază Brush. Cel
mai simplu obiect este SolidBrush, care umple o suprafaţă cu o culoare omogenă.
Exemplu:
SolidBrush br1=new SolidBrush(Color.Blue);//crează o pensulă albastră
Exemplu:
TextureBrush br2=new TextureBrush(new Bitmap("brush.bmp"),
System.Drawing.Drawing2D.WrapMode.Tile); //crează un obiect TextureBrush care va fi
multiplicat pe toată suprafaţa formei
Observaţie: Clasa Brushes are proprietăţi care definesc pensule definite de sistem.
Clasa Image
Aceasta este o clasă abstractă care stă la baza claselor Bitmap şi Metafile.
Proprietăţi
Metode
Clasa Bitmap
Un obiect Bitmap reprezintă o imagine grafică (reprezentată prin pixeli) împreună cu
atributele sale.
Metode specifice
Graphics g=p.CreateGraphics();
Bitmap bm=new Bitmap("resurse\\poza.jpg");
bm=new Bitmap(bm,200,200); //redimensionam
g.DrawImage(bm,0,0,300,250);
Color c=bm.GetPixel(2,2);
bm.MakeTransparent(c);
g.DrawImage(bm,300,0,300,250);
Clasa Graphics
Clasa Graphics suportă operaţii de desenare, iar un obiect al clasei Graphics reprezintă
locaţia către care se trimite afişarea grafică, dar poate oferi şi informaţii despre dispozitivul
utilizat. Un obiect al acestei clase reprezintă o structură de date fundamentală din Windows,
denumită context de dispozitiv, fiind de fapt un intermediar între utilizator şi dispozitivul de
ieşire.
Obiectele clasei Graphics nu sunt create direct ci se obţin cu ajutorul metodei
CreateGraphics.
Exemplu:
Graphics g=formularulMeu.CreateGraphics();
Un obiect Graphics utilizează resurse de sistem care vor fi eliberate din memorie
atunci când obiectul este colectat la gunoi. Cum nu se cunoaşte momentul în care se
colectează gunoiul, este recomandat ca după utilizare, resursele să fie eliberate, apelând
metoda Dispose:
Exemplu:
g.Dispose();
Clasa Graphics include multe metode, cele mai des utilizate fiind prezentate în tabelul
de mai jos.
Metode
linii radiale.
FillPolygon Umple interiorul unui poligon definit de un tablou de puncte.
FillRectangle Umple interiorul unui dreptunghi.
FromImage Crează un obiect Graphics nou dintr-un obiect Image.
MeasureString Dă dimensiunile unui text, precizîndu-se fontul folosit.
RotateTransform Aplică o rotaţie dată de o matrice.
Save Salvează contextul grafic reprezentat de obiectul curent.
r.Y+=70;
g.FillEllipse(new TextureBrush(bm),r);
StringFormat sf=new StringFormat();
sf.Alignment=StringAlignment.Center;
g.DrawString("FillEllipse cu TextureBrush",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50),sf);//am folosit si formatari pentru text
r.Y+=70;
g.DrawRectangle(new Pen(Color.Blue,4),r);
g.FillRectangle(new SolidBrush(Color.Red),r);
g.DrawString("DrawRectangle FillRectangle",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,120,50));
r.Y+=70;
g.FillRectangle(new TextureBrush(bm),r);
g.DrawString("FillRectangle cu TextureBrush",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,120,50));
r.X=260;
r.Y=10;
g.DrawPie(new Pen(Color.Blue,4),r,10,340);
g.FillPie(new SolidBrush(Color.Red),r,10,340);
g.DrawString("DrawPie FillPie",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
g.DrawLine(new Pen(Color.Cyan,3),r.X,r.Y,r.X+100,r.Y+50);//g.DrawLine(new
Pen(Color.Cyan,3),Point(r.X,r.Y),Point(r.X+100,r.Y+50));-pot fi si valori de tip float
g.DrawString("DrawLine",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
Point P1=new Point(r.X+3,r.Y+35),P2=new Point(r.X+50,r.Y+25),P3=new
Point(r.X+90,r.Y+5),P4=new Point(r.X+99,r.Y+49);
g.DrawBezier(new Pen(Color.Red,2),P1,P2,P3,P4);
g.DrawString("DrawBezier",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
Point[] P={new Point(r.X+3,r.Y+35),new Point(r.X+50,r.Y+25),new
Point(r.X+90,r.Y+5),new Point(r.X+79,r.Y+29),new Point(r.X+99,r.Y+49)};
g.DrawPolygon(new Pen(Color.Red,2),P);
g.FillPolygon(new SolidBrush(Color.Blue),P);
g.DrawString("DrawPolygon FillPolygon",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
g.DrawImage(bm,r);
g.DrawString("DrawImage (complet)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.X=480;
r.Y=10;
g.DrawImage(bm,r,30,30,80,40,GraphicsUnit.Pixel);
g.DrawString("DrawImage (partial)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
g.DrawImage(bm,r,110,30,-80,40,GraphicsUnit.Pixel);
g.DrawString("DrawImage (simetrie Oy)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
g.DrawImage(bm,r,30,70,80,-40,GraphicsUnit.Pixel);
g.DrawString("DrawImage (simetrie Ox)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
r.Y+=70;
g.DrawImage(bm,r,110,70,-80,-40,GraphicsUnit.Pixel);
g.DrawString("DrawImage (simetrie Ox si Oy)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,60));
r.Y+=60;
Point[] Q={new Point(r.X+3,r.Y+25),new Point(r.X+60,r.Y+5),new
Point(r.X+40,r.Y+45)};
g.DrawImage(bm,Q);//cu trei puncte ce descriu trei dintre punctele unui
paralelogram
g.DrawString("DrawImage (vector puncte)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,120,50));
bm.RotateFlip(RotateFlipType.Rotate90FlipX);
r.Y+=60;
g.DrawImage(bm,r);
g.DrawString("DrawImage (RotateFlip)",f,Brushes.Blue,new
RectangleF(r.X+110,r.Y,100,50));
g.Dispose();