160 likes | 315 Views
Grafika vo Visual C++. Namespace System::Drawing. Namespace System::Drawing obsahuje funkcie na prácu s jednoduchou grafikou. Kompletn ý popis: http://msdn2.microsoft.com/en-us/library/system.drawing(VS.71).aspx System::Drawing umožňuje napríklad:
E N D
Namespace System::Drawing • Namespace System::Drawing obsahuje funkcie na prácu s jednoduchou grafikou. • Kompletný popis: http://msdn2.microsoft.com/en-us/library/system.drawing(VS.71).aspx • System::Drawing umožňuje napríklad: • Vykresliť základné geometrické tvary – čiaru, kružnicu, n-uholník, krivku... • Zobraziť obrázok a pracovať s ním • Zobraziť texty • Pracovať s perami a štetcami, ktoré určujú farbu a typ kreslenia a výplne • Pracovať s preddefinovanými štruktúrami, napr. bod a obdĺžnik
Štruktúry v System::Drawing 1 . Point Táto štruktúra predstavuje dvojrozmerný bod s celočíselnými súradnicami. Štruktúra obsahuje údaje X a Y, v ktorých sú uložené súradnice bodu. 2. PointF Táto štruktúra predstavuje dvojrozmerný bod s reálnymi súradnicami. Štruktúra obsahuje údaje X a Y, v ktorých sú uložené súradnice bodu. 3. Rectangle Táto štruktúra reprezentuje obdĺžnik s celočíselnými súradnicami vrcholov. Je daná štyrmi údajmi: X, Y – súradnice ľavého horného rohu Width – šírka obĺžnika Height – výška obdĺžnika 4. RectangleF Táto štruktúra reprezentuje obdĺžnik s reálnymi súradnicami vrcholov. Má rovnaké údaje ako Rectangle.
Štruktúry v System::Drawing 5. Size Je to štruktúra, ktorá uchováva dvojicu celočíselných údajov (rozmerov), môže sa jednať napr. o rozmery obdĺžnika. Obsahuje dva údaje Height a Width. 6. SizeF Je to štruktúra, ktorá uchováva dvojicu reálnych údajov. Obsahuje dva údaje Height a Width. 7. Color V tejto štruktúre je uložená farba vo formáte aplha-red-green-blue. Množstvo farieb je už preddefinovaných a farbu s konkrétnymi hodnotami dostaneme pomocou metódy: Color FromArgb(int red, int green, int blue) resp. Color FromArgb(int alpha, int red, int green, int blue)
Triedy v System::Drawing 1. Graphics Táto trieda reprezentuje plochu, na ktorú kreslíme. Kresliaca plocha väčšinou patrí k nejakému komponentu (hlavné okno, PictureBox...). Plochu vytvoríme pomocou funkcie: Graphics^ CreateGraphics() Táto funkcia je metódou príslušného komponentu. Ak chceme napr. kresliť do PictureBoxu, ktorý sa volá pictureBox1, urobíme to takto: Graphics ^grafika=pictureBox1->CreateGraphics(); 2. Pen Táto trieda predstavuje pero, ktorým kreslíme čiary. V konštruktore triedy je ako parameter farba pera (štruktúra Color). Nové pero môžeme vytvoriť takto: Pen ^Pero=gcnew Pen(farba); 3. SolidBrush SolidBrush je jednofarebný štetec, ktorý sa používa na vypĺňanie objektov. V konštruktore je ako parameter jeho farba (štruktúra Color). Vytvorenie štetca teda vyzerá takto: SolidBrush ^Stetec=gcnew SolidBrush(farba);
Triedy v System::Drawing 4. Bitmap Trieda Bitmap uchováva obrázok vo forme množiny pixelov. Táto trieda má 12 rôznych konštruktorov, napr. Bitmap(String cesta) – načíta obrázok zo súboru Bitmap(int sirka, int vyska) – vytvorí nový obrázok s danými rozmermi 5. TextureBrush TextureBrush predstavuje štetec, ktorý vypĺňa objekt nejakou vzorkou. Vzorka je zadaná v konštruktore ako obrázok (objekt typu Bitmap, resp. rodičovskej triedy Image). Nový štetec vytvoríme napr. takto: TextureBrush ^Stetec=gcnew TextureBrush(obrazok); 6. Font V tejto triede sú uložené údaje o písme, ktoré sa použije pri vykreslení textu. Objekt triedy Font má rôzne konštruktory, napr.: Font(String *meno, float velkost, FontStyle styl)
Metódy triedy Graphics trieda Graphics, ktorá predstavuje kresliacu plochu, má rôzne metódy na vykresľovanie geometrických útvarov, obrázkov a textu. 1. Čiara Čiara sa dá vykresliť zadaním pera, ktoré ju bude kresliť, a súradníc začiatočného a koncového bodu. void DrawLine(Pen *pero, int x1, int y1, int x2, int y2) void DrawLine(Pen *pero, Point bod1, Point bod2) 2. Obdĺžnik Obdĺžnik sa vykreslí zadaním pera a štruktúry Rectangle alebo priamo súradníc ľavého horného rohu, šírky a výšky. void DrawRectangle(Pen *pero, Rectangle obdlznik) void DrawRectangle(Pen *pero, int x, int y, int sirka, int vyska)
Metódy triedy Graphics 3. n-uholník Pre n-uholník treba zadať pero a pole vrcholov (štruktúr Point). void DrawPolygon(Pen *pero, Point[] body) 4. Elipsa Pri elipse sa zadáva pero a obdĺžnik, do ktorého je elipsa vpísaná void DrawEllipse(Pen *pero, Rectangle obdlznik) void DrawEllipse(Pen *pero, int x, int y, int sirka, int vyska) 5. Vyplnený obdĺžnik, n-uholník a elipsa V týchto prípadoch sa namiesto pera zadáva Štetec (SolidBrush alebo TextureBrush), ostatné parametre sú rovnaké ako pri nevyplnených objektoch. void FillRectangle(Brush *stetec, Rectangle obdlznik) void FillRectangle(Brush *stetec, int x, int y, int sirka, int vyska) void FillPolygon(Brush *stetec, Point[] body) void FillEllipse(Brush *stetec, Rectangle obdlznik) void FillEllipse(Brush *stetec, int x, int y, int sirka, int vyska)
Metódy triedy Graphics 6. Oblúk elipsy V tomto prípade treba zadať pero, obdĺžnik, do ktorého je elipsa vpísaná, začiatočný uhol a uhol oblúka . void DrawArc(Pen *pero, Rectangle obdlznik, int alfa, int beta) void DrawArc(Pen *pero, int x, int y, int sirka, int vyska,int alfa, int beta) 7. Krivka Krivka je daná perom a poľom bodov, cez ktoré má prechádzať. Je možnosť nastaviť aj napätie krivky, ktoré ovplyvňuje jej výsledný tvar. void DrawCurve(Pen *pero, Point[] body) void DrawCurve(Pen *pero, Point[] body, float napatie)
Metódy triedy Graphics 8. Text Text je daný reťazcom, ktorý sa má vypísať, fontom, štetcom a svojou pozíciou (danou reálnymi súradnicami). void DrawString(String *retazec, Font *font, Brush *stetec, PointF pozicia) void DrawString(String *retazec, Font *font, Brush *stetec, float x, float y) 9. Obrázok Obrázok sa vykreslí tak, že sa zadá už vytvorený objekt triedy Image (resp. Bitmap) a pozícia, na ktorú sa obrázok umiestni (ľavý horný roh). void DrawImage(Image *obrazok, Point pozicia) void DrawImage(Image *obrazok, int x, int y) Ak chceme obrázok preškálovať, môžeme zadať aj jeho novú veľkosť: void DrawImage(Image *obrazok, int x, int y, int sirka, int vyska) Rovnaký výsledok docielime, ak dáme obrázok vykresliť priamo do konkrétneho obdĺžnika: void DrawImage(Image *obrazok, Rectangle obdlznik)
Metódy triedy Graphics Príklad: Kreslenie do PictureBoxu Vytvorme aplikáciu, ktorá bude mať v hlavnom okne PictureBox a dve tlačítka s nápismi „kresli“ a „koniec“. Po stlačení tlačítka „kresli“ sa v PictureBoxe zobrazí takýto obrázok:
Metódy triedy Graphics Okno našej aplikácie bude vyzerať takto: PictureBox pictureBox1 Button button2 Button button1
Metódy triedy Graphics Po kliknutí na button1 sa zavolá nasledujúca funkcia: System::Void button1_Click(System::Object *sender, System::EventArgs *e) { Graphics ^grafika = pictureBox1->CreateGraphics(); Pen ^Pero1 = gcnew Pen(Color::Red); Pen ^Pero2 = gcnew Pen(Color::Blue); Pen ^Pero3 = gcnew Pen(Color::FromArgb(120,70,0)); SolidBrush ^Stetec1 = gcnew SolidBrush(Pero3->Color); Bitmap ^Vzorka =gcnew Bitmap("vzorka1.jpg"); TextureBrush ^Stetec2 = gcnew TextureBrush(Vzorka); System::Drawing::Font ^Pismo = gcnew System::Drawing::Font("Tahoma",15,FontStyle::Regular); grafika->DrawEllipse(Pero1,150,100,40,40); //hlava Point body[]=new Point[3]; body[0]=Point(170,140); body[1]=Point(150,160); body[2]=Point(190,160); grafika->DrawPolygon(Pero1,body); //krk
Metódy triedy Graphics grafika->FillRectangle(Stetec2,150,160,40,60); //telo grafika->DrawLine(Pero1,150,160,135,200); //ľavá ruka grafika->DrawLine(Pero1,190,160,205,200); //pravá ruka grafika->DrawLine(Pero2,160,220,160,280); //ľavá noha grafika->DrawLine(Pero2,180,220,180,280); //pravá noha grafika->DrawRectangle(Pero2,160,115,1,1); //ľavé oko grafika->DrawRectangle(Pero2,180,115,1,1); //pravé oko grafika->DrawArc(Pero1,160,110,20,20,30,120); //ústa Point krivka[]=new Point[4]; krivka[0]=Point(170,105); krivka[1]=Point(177,90); krivka[2]=Point(170,85); krivka[3]=Point(165,90); grafika->DrawCurve(Pero3,krivka); //vlas grafika->DrawString("System::Drawing",Pismo,Stetec1,Point(95,250)); }
Metódy triedy Graphics Príklad: Vykreslenie obrázku Predchádzajúci príklad zmeníme tak, že po stlačení tlačítka „kresli“ sa v PictureBoxe objaví obrázok face.jpg. Obrázok nezobrazíme v pôvodnej veľkosti 600x449, ale preškálujeme ho na nový rozmer 200x150.
Metódy triedy Graphics Po stlačení tlačítka button1 sa zavolá táto funkcia: System::Void button1_Click(System::Object *sender, System::EventArgs *e) { Graphics ^grafika = pictureBox1->CreateGraphics(); Bitmap ^obrazok = gcnew Bitmap("face.jpg"); grafika->DrawImage(obrazok,150,100,200,150); }