Laborator nr.2
Lucrarea nr. 2
Elemente de grafic n C#
1. Scopul lucrrii:
Lucrarea de fata i propune familiarizarea cu lucrul in mod grafic in limbajul C#:
fundamentele proiectrii grafice GDI, alegerea culorilor, tratarea erorilor, realizarea figurilor
grafice de baza.
2. Noiuni teoretice:
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.
Laborator nr.2
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.
Laborator nr.2
Laborator nr.2
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.
1. Clase grafice: furnizeaz metodele pentru desenare pe monitor.
NUME CLAS
Bitmap
Brush
Brushes
ColorConverter
ColorTranslator
Cursor
CursorConverter
Cursors
Font
FontConverter
FontFamily
Graphics
Icon
IconConverter
Image
ImageAnimator
ImageConverter
ImageFormatConverter
Pen
Pens
PointConverter
RectangleConverter
Region
SCOP
ncapsuleaz un bitmap GDI+.
De la aceast clas de baz sunt derivate clasele pentru definirea
obiectelor care pot fi folosite pentru a umple formele grafice
nchise. Formele pot fi elipse, poligoane, felii de plcint,
dreptunghiuri, etc.
Furnizeaz pensule pentru toate culorile standard.
Convertete o culoare de la un tip de date la altul.
Translateaz culorile la sau de la obiectele Color GDI+.
Reprezint imaginea cursorului.
Convertete cursorul de la un tip de date la altul.
Definete cursoarele standard.
Definete proprietile fonturilor pentru text. Acestea sunt aspectul
fontului, dimensiunea i atributele de stil.
Convertete fonturile de la un tip de date la altul.
Definete un grup de fonturi cu design similar i cu variaii minore
de stil.
ncapsuleaz o suprafa de desen GDI+.
Reprezint o pictogram.
Convertete o pictogram de la un tip de date la altul.
Furnizeaz funcionalitate pentru bitmap-uri, cursoare, pictograme
i metafiiere.
Suport animaia imaginilor.
Convertete o imagine de la un tip de date la altul.
Convertete culorile de la un tip de date la altul.
Definete proprietile peniei pentru desenarea obiectelor, cum ar
fi arce de cerc, linii, dreptunghiuri i multe altele.
Furnizeaz penie n toate culorile standard.
Convertete un punct de la un tip de date la altul.
Convertete un dreptunghi de la un tip de date la altul.
Descrie interiorul unei forme grafice compuse din dreptunghiuri i
ci.
Laborator nr.2
SizeConverter
SolidBrush
SCOP
Definete o culoare ARGB.
Definete o pereche ordonat de coordonate x i y. Aceste
coordonate definesc un punct ntr-un plan bidimensional.
Definete o pereche ordonat de coordonate x i y n virgul mobil.
Aceste coordonate definesc, de asemenea, un punct ntr-un plan
bidimensional.
Stocheaz localizarea i dimensiunile pentru o regiune
dreptunghiular.
Stocheaz localizarea i dimensiunile pentru o regiune
dreptunghiular, definit prin valori n virgul mobil.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
ordonat de valori pentru lime i nlime.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
ordonat de valori n virgul mobil pentru lime i nlime.
SCOP
Furnizeaz o varietate de siluri pentru pensule.
Furnizeaz alinierea coninutului pe o suprafa de desen.
Furnizeaz informaii de stil pentru text.
Furnizeaz o unitate de msur pentru date.
Furnizeaz culorile sistemului.
Definete stilurile penielor.
Identific modul de umplere a poligoanelor formate din regiunile de
suprapunere.
Furnizeaz alinierea unui string text n raport cu dreptunghiul de
layout.
StringDigitSubstitute
StringFomatFlags
StringTrimming
StringUnit
Laborator nr.2
DESTINAIA
Furnizeaz o nou instan a clasei grafice, folosind o administrare
pentru contextul dispozitivului (HDC Handle to the Device
Context).
Furnizeaz o nou instan a clasei grafice,folosind o administrare
FromImage
GetHalftonePalette
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
AddMetafileComment
BeginContainer
Clear
Dispose
DrawArc
DrawBezier
DrawBeziers
DrawClosedCurve
DrawCurve
DrawEllipse
DrawIcon
DrawIconUnstretched
DrawImage
DrawImageUnscaled
DrawLine
DrawLines
DrawPath
DrawPie
DrawPolygon
DrawRectangle
DrawRectangles
DrawString
EndContainer
EnumerateMetafile
Equals
(motenit de la Object)
ExcludeClip
FillClosedCurve
FillEllipse
FillPath
SCOP
Copiaz comentariul dintr-un buffer ntr-un metafiier cu format
mbuntit.
Furnizeaz nceputul unui container de metafiier.
Cur aria prin umplerea suprafeei de desen cu o culoare dat.
terge grafica i elibereaz memoria alocat.
Traseaz un arc de la o specificaie de elips dat.
Traseaz o curb cubic Bezier.
Traseaz o serie de curbe cubice Beziers.
Traseaz o curb nchis. O matrice de curbe definete curba.
Traseaz o curb. Curba este definit printr-o matrice de puncte.
Traseaz o elips.
Traseaz o imagine iconic.
Traseaz o imagine iconic. Aceast metod alungete imaginea la
dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
Traseaz o imagine.
Traseaz o imagine. Aceast metod alungete imaginea la
dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
Traseaz o linie.
Traseaz o serie de segmente de dreapt. Segmentele se
conecteaz ntr-un tablou de puncte.
Traseaz linii i curbe definite printr-un GraphicsPath.
Traseaz conturul unei felii de plcint (pie section).
Traseaz conturul unui poligon.
Traseaz conturul unui dreptunghi.
Traseaz conturul unei serii de dreptunghi.
Traseaz un string.
Furnizeaz sfritul unui container de metafiier.
Enumereaz un fiier.
Afl dac obiectul utilizat reprezint aceeai instan ca i obiectul
curent.
Specific regiunea decupat pentru excludere.
Umple interiorul unei curbe nchise specificate printr-un tablou de
puncte.
Umple interiorul unei elipse specificate printr-un dreptunghi
mrginitor.
Umple interiorul unei ci.
Laborator nr.2
FillPie
FillPolygon
FillRectangle
FillRectangles
FillRegion
Flush
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,
Laborator nr.2
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
DENUMIREA STILULUI
Custom
Dash
DashDot
DashDotDot
Dot
Solid
DESCRIERE
Permite un stil de liniue personalizat, definit de utilizator.
Traseaz o linie alctuit dintr-o serie de liniue.
Traseaz o linie alctuit dintr-o serie de alternane liniupunct.
Traseaz o linie alctuit dintr-o serie de alternane liniupunct-punct.
Traseaz o linie alctuit dintr-o serie de puncte.
Traseaz o linie plin.
DESCRIEREA UMPLERII
Traseaz linii pe diagonal de la dreapta-sus la stnga-jos.
Traseaz linii ncruciate orizontale i verticale.
Traseaz linii ncruciate diagonale.
Traseaz linii pe diagonal de la stnga-sus la dreapta-jos.
Traseaz linii orizontale.
Traseaz linii verticale.
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);
Laborator nr.2
//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.
Laborator nr.2
graph.DrawCurve(penCurrent, pt);
Laborator nr.2
Laborator nr.2
graph.DrawClosedCurve(penCurrent, pt);
Laborator nr.2
Laborator nr.2
int cx,cy;
cx = 100; cy = pictureBox2.Height-40;
//deseneaza tulpina dinspre coltul stanga-jos spre centru
e.Graphics.DrawBezier(new Pen(Color.Green,10),
new Point(0,cy), new Point(0,3*cy/4),
new Point(cx/4,cy/4),new Point(cx/2,cy/2));
//stabileste transformarea pentru restul florii
float fScale = Math.Min (cx,cy)/1500f;//returneaza valoarea minima
dintre cx si cy impartita la 2000
e.Graphics.TranslateTransform(cx/2,cy/2);
e.Graphics.ScaleTransform(fScale,fScale);
//deseneaza petale rosii
GraphicsPath path = new GraphicsPath();//reprezentare serii de linii
si curbe conectate
path.AddBezier(new Point(0,0),new Point(125,125),
new Point(475,125),new Point(600,0));
path.AddBezier(new Point(600,0),new Point(475,-125),
new Point(125,-125),new Point(0,0));
for(int i=0;i<12;i++)
{
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);
}
Laborator nr.2
Laborator nr.2
Laborator nr.2
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();
}
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.