Documente Academic
Documente Profesional
Documente Cultură
Lucrarea nr. 2
Elemente de grafic n C#
1. Scopul lucrrii:
2. Noiuni teoretice:
Introducere
C# face parte, alturi de Java, dintr-o nou generaie de limbaje bazate pe paradigma
programrii orientate obiect. El permite programatorului s dezvolte n mod elegant aplicaii
complexe cu ajutorul unui set puternic de instrumente. n mediul de dezvoltare pentru C#
programatorul i poate alege obiectele care trebuie s fac parte din interfaa grafic cu
mouse-ul i apoi le poate deplasa n fereastr, astfel nct s extind interfaa n mod vizual i
nu numai prin cod. Nucleul acestei tehnologii este programarea bazat pe componente de
dimensiuni reduse, uor de construit i de folosit. Pe lng faptul c Visual Studio .NET este
ideal pentru crearea foarte rapid a unor aplicaii Windows, el permite de asemenea folosirea
tuturor trsturilor avansate ale limbajului C++, precum i a funciilor Windows API. Ca o
extensie a Visual Studio 6, este posibil i scrierea de cod MFC.
Clasele obiectelor din GUI au anumite funcii: meniu, timer, textbox, buton. Ele sunt
introduse pur i simplu n proiect i n continuare se folosesc metodele i proprietile lor, iar
comunicarea cu sistemul de operare Windows se realizeaz transparent pentru programator.
Aspectul general
Cnd este creat un nou proiect C# de tip Windows Application, apare o fereastr cu
toate caracteristicile setate implicit n Windows. n mijlocul ecranului, apare o form
(Form) fereastra principal a programului, n care se vor aduga diverse componente de
control: butoane, textbox-uri etc.:
Elemente de grafica pe calculator Laborator nr.2
n partea din stnga a ecranului exist un toolbar (ViewToolbox, Ctrl+Alt+X) din care se
vor alege cu mouse-ul componentele ce vor fi adugate n fereastr.
Pentru adugarea unei componente, programatorul va face click cu mouse-ul pe
imaginea corespunztoare din toolbox, apoi va face click n form, n locul unde dorete s
apar componenta respectiv. Odat introduse n fereastr, componentele pot fi mutate,
redimensionate, copiate sau terse. n dreapta este o fereastr de proprieti (ViewProperties
Window, F4). De aici, fiecrei componente folosite i se pot modifica proprietile, adic
aspectul exterior, aa cum va aprea n program. De asemenea, se pot selecta evenimentele
corespunztoare componentei care vor fi tratate n program.
Application
n general, pentru tratarea unui eveniment n C#, este selectat mai nti obiectul de tipul dorit
(la noi fereastra), apoi n fereastra de proprieti se alege tab-ul de evenimente i se
identific evenimentul cutat.
Dup un dublu-click, ca n figura de mai sus, se va crea automat o nou funcie vid
corespunztoare evenimentului, iar utilizatorul va trebui numai s scrie n corpul funciei
aciunile dorite.
Grafic n C#
Pentru lucrul n mod grafic, C# pune la dispoziia programatorului o clas numit
Graphics. Spaiul de nume System.Drawing furnizeaz accesul la proprietile grafice GDI+
de baz pentru programatorii de C# n Windows. GDI+ permite utilizarea elementelor
sofisticate de grafic pentru jocuri i alte medii grafice bogate. Spaiul de nume
System.Drawing furnizeaz clase administrative care ncapsuleaz funcionalitatea noii
biblioteci grafice GDI+. Aici, obiectul Graphics ofer metode pentru a desena arce, elipse,
linii, puncte i chiar stringuri.
STRUCTUR SCOP
Color Definete o culoare ARGB.
Definete o pereche ordonat de coordonate x i y. Aceste
Point
coordonate definesc un punct ntr-un plan bidimensional.
Definete o pereche ordonat de coordonate x i y n virgul mobil.
PointF Aceste coordonate definesc, de asemenea, un punct ntr-un plan
bidimensional.
Stocheaz localizarea i dimensiunile pentru o regiune
Rectangle
dreptunghiular.
Stocheaz localizarea i dimensiunile pentru o regiune
RectangleF
dreptunghiular, definit prin valori n virgul mobil.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
Size
ordonat de valori pentru lime i nlime.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
SizeF
ordonat de valori n virgul mobil pentru lime i nlime.
ENUMERAREA SCOP
BrushStyle Furnizeaz o varietate de siluri pentru pensule.
ContentAlignment Furnizeaz alinierea coninutului pe o suprafa de desen.
FontStyle Furnizeaz informaii de stil pentru text.
GraphicsUnit Furnizeaz o unitate de msur pentru date.
KnownColor Furnizeaz culorile sistemului.
PenStyle Definete stilurile penielor.
Identific modul de umplere a poligoanelor formate din regiunile de
PolyFillMode
suprapunere.
Furnizeaz alinierea unui string text n raport cu dreptunghiul de
StringAlignment
layout.
Elemente de grafica pe calculator Laborator nr.2
METODA DESTINAIA
Furnizeaz o nou instan a clasei grafice, folosind o administrare
FromHDC pentru contextul dispozitivului (HDC Handle to the Device
Context).
FromHWND Furnizeaz o nou instan a clasei grafice,folosind o administrare
Elemente de grafica pe calculator Laborator nr.2
5. Metode cu instane publice. Tabelul conine cea mai mare parte a primitivelor de
desen utilizate pentru crearea arcurilor de cerc, a liniilor, a elipselor, a
dreptunghiurilor, .a.m.d.
METODA SCOP
Copiaz comentariul dintr-un buffer ntr-un metafiier cu format
AddMetafileComment
mbuntit.
BeginContainer Furnizeaz nceputul unui container de metafiier.
Clear Cur aria prin umplerea suprafeei de desen cu o culoare dat.
Dispose terge grafica i elibereaz memoria alocat.
DrawArc Traseaz un arc de la o specificaie de elips dat.
DrawBezier Traseaz o curb cubic Bezier.
DrawBeziers Traseaz o serie de curbe cubice Beziers.
DrawClosedCurve Traseaz o curb nchis. O matrice de curbe definete curba.
DrawCurve Traseaz o curb. Curba este definit printr-o matrice de puncte.
DrawEllipse Traseaz o elips.
DrawIcon Traseaz o imagine iconic.
Traseaz o imagine iconic. Aceast metod alungete imaginea la
DrawIconUnstretched dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
DrawImage Traseaz o imagine.
Traseaz o imagine. Aceast metod alungete imaginea la
DrawImageUnscaled dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
DrawLine Traseaz o linie.
Traseaz o serie de segmente de dreapt. Segmentele se
DrawLines
conecteaz ntr-un tablou de puncte.
DrawPath Traseaz linii i curbe definite printr-un GraphicsPath.
DrawPie Traseaz conturul unei felii de plcint (pie section).
DrawPolygon Traseaz conturul unui poligon.
DrawRectangle Traseaz conturul unui dreptunghi.
DrawRectangles Traseaz conturul unei serii de dreptunghi.
DrawString Traseaz un string.
EndContainer Furnizeaz sfritul unui container de metafiier.
EnumerateMetafile Enumereaz un fiier.
Equals Afl dac obiectul utilizat reprezint aceeai instan ca i obiectul
(motenit de la Object) curent.
ExcludeClip Specific regiunea decupat pentru excludere.
Umple interiorul unei curbe nchise specificate printr-un tablou de
FillClosedCurve
puncte.
Umple interiorul unei elipse specificate printr-un dreptunghi
FillEllipse
mrginitor.
FillPath Umple interiorul unei ci.
Elemente de grafica pe calculator Laborator nr.2
Sistemul de coordonate
Multe limbaje de la nceput au folosit cele mai mici elementele de pe ecran posibile
pentru a descrie coordonatele de ecran i scalele de desen. Aceste elemente, numite pixeli,
Elemente de grafica pe calculator Laborator nr.2
//********************************************************************
Proprietile grafice
Culori
Culorile pentru desen sunt specificate prin crearea penielor de desen, iar culorile de
umplere sunt specificate prin crearea pensulelor. Peniele de desen contureaz formele, n
timp ce pensulele sunt utilizate pentru a umple cu culoare interiorul unor forme nchise. De
Elemente de grafica pe calculator Laborator nr.2
exemplu, o simpl peni albastr poate fi creat pornind de la clasa Pen cu urmtoarea
sintax:
Pen bluepen = new Pen(Color.Blue);
O peni care traseaz linii de orice grosime specificat poate fi creat astfel:
Pen redpen = new Pen(Color.Red, 25);
O pensul simpl de culoare galben solid poate fi creat pornind de la clasa Brush astfel:
Brush yellowbrush = new SolidBrush(Color.Yellow);
Pentru a elibera orice instan ale acestor clase se folosete metoda Dispose(). De exemplu
n cazul lui redpen, aceast metod se implementeaz astfel:
Redpen.Dispose();
Cnd este creat o nou peni pornind de la clasa Pen, penia va trasa o linie solid,
de grosime prestabilit sau specificat. Dup crearea peniei, C# pentru Windows permite
schimbarea stilului acesteia.
Pen bluepen = new Pen(Color.Blue, 10);
//traseaz cu o liniu i dou puncte
bluepen.DashStyle = DashStyle.DashDotDot;
bluepen.StartCap = LineCap.ArrowAnchor;
Ex: Crem o pensul haurat cu un stil de haurare ncruciat. Se stabilete culoarea de prim
plan la magenta i culoarea de fundal la alb.
Brush magentabrush = new HatchBrush(HatchStyle.Cross, Color.Magenta,
Color.White);
g.FillRectangle(magentabrush, 100, 550, 500,100);
Elemente de grafica pe calculator Laborator nr.2
Ex.:
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics ;
Rectangle rect = new Rectangle(50, 30, 100, 100); //punctul de nceput pentru
//dreptunghi este 50, 30. Dreptunghiul se extinde 100 de pixeli pe direcia x i 100 de
//pixeli n direcia y.
g.DrawRectangle(bluepen, rect);
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red,
Color.Yellow, LinearGradientMode.BackwardDiagonal);
g.FillRectangle(lBrush, rect);//metoda FillRectangle umple interiorul
//dreptunghiului cu o culoare dat.
}
Metoda DrawLine este utilizat pentru a trasa o linie care unete dou puncte date.
Metoda DrawArc este utilizat pentru a trasa un arc dintr-o elips specificat.
Metoda DrawEllipse este utilizat pentru a trasa conturul unei elipse.
Metoda FillEllipse este utilizat pentru a umple interiorul unei elipse.
Metoda DrawPie este utilizat pentru a trasa conturul unei felii de plcint. Felia
este definit printr-o elips i dou linii radiale (raze).
Metoda FillPie este utilizat pentru umple interiorul unei felii de plcint. Felia este
definit printr-o elips i dou linii radiale (raze).
Metoda DrawString este utilizat pentru a trasa un string pe un formular.
Ex:
DrawString (string s, Font font, Brush brush, int x, int y)
Metoda DrawCurve o linie care unete dou sau mai multe puncte. n exemplul de
mai jos prima curba, C1, include numai dou puncte. C2 include trei puncte. C3
include 4 puncte.
Elemente de grafica pe calculator Laborator nr.2
graph.DrawCurve(penCurrent, pt);
}
graph.DrawCurve(penCurrent, pt);
}
graph.DrawClosedCurve(penCurrent, pt);
}
Curbele Bzier sunt curbe parametrice cubice n care se folosesc patru puncte de control, P0,
P1 , P2 , P3 , iar funciile de baz sunt funciile Bzier, care au urmtoarele expresii:
B0(u) = (1+u)3
B1(u) = 3u(1-u)2
B2(u) = 3u2(1-u)
B3(u) = 3u3
int cx,cy;
cx = 100; cy = pictureBox2.Height-40;
e.Graphics.FillPath(Brushes.Red,path);
e.Graphics.DrawPath(Pens.Black,path);
e.Graphics.RotateTransform(360/12);
}
//deseneaza cerc galben in centru
Rectangle rect = new Rectangle(-150,-
150,300,300);
e.Graphics.FillEllipse(Brushes.Yellow,rect)
;
e.Graphics.DrawEllipse(Pens.Black,rect);
}
MessageBox.Show("Introduceti ziua");
textBox3.Focus();
}
else if (textBox5.Text == "")
{
MessageBox.Show("Introduceti ziua");
textBox3.Focus();
}
else if (comboBox2.SelectedIndex == -1)
{
MessageBox.Show("Introduceti luna");
comboBox2.Focus();
comboBox2.DroppedDown = true;
}
else
{
zi = Convert.ToInt32(this.textBox3.Text);
luna = Convert.ToInt32(this.comboBox2.SelectedIndex + 1);
an = Convert.ToInt32(this.textBox5.Text);
data = new DateTime(an, luna, zi);
afisare();
}
}
Apelul claselor Zile.cs i Planete.cs se face din funcia afiare():
void afisare()
{
zile z = new zile(data);
planete pl = new planete(z.Diferenta);
this.textBox4.Text = "";
for (int i = 0; i < pl.NumarPlanete; i++)
this.textBox4.Text += "Planeta " + pl.Nume[i] + " este la
" + pl.Longitudine[i] + ((char)(13)) + ((char)(10));
}
3. Desfurarea lucrrii:
1. Se va citi breviarul teoretic. Se atrage atenia asupra faptului c aceste informaii vor fi
folosite i la desfurarea altor lucrri de laborator.
2. Se vor studia exemplele prezentate pe parcursul acestui laborator urmrind efectul
rulrii acestora i buna lor execuie.
3. Se va ncerca gsirea altor posibiliti de soluionare a problemelor propuse.
4. Pentru aplicaia de astronomie, s se afieze data cnd dou planete alese de utilizator
sunt la distan minim/maxim.