Programování
Gui grafika
Kreslí se na jakýkoliv control, primárně na picture box, jde i panel.
Musí se vložit event paint, na kterým je evenhlander e, který má objekt "Graphics", který umožnuje kdekoliv kreslit
Graphics g = e.Graphics; Paint se vola vždy, když se potřebuje vykreslení, což je při změně rozlišení aplikace. Změnšování a zvětšování.
this.picturebox.refresh() spouští paint()
Pokud chceme dostat graphics z controleru používáme :
graphics g = this.picturebox.createGraphics()
Ale vše co se nakreslí zmizí po změně rozlišení, jelikož není v Paint metodě
* Bonus *
g.smoothingMode = smoothingMode.HighQuality - Zapne vykreslovaní
Více zde
Musí se vložit event paint, na kterým je evenhlander e, který má objekt "Graphics", který umožnuje kdekoliv kreslit
Graphics g = e.Graphics; Paint se vola vždy, když se potřebuje vykreslení, což je při změně rozlišení aplikace. Změnšování a zvětšování.
this.picturebox.refresh() spouští paint()
Pokud chceme dostat graphics z controleru používáme :
graphics g = this.picturebox.createGraphics()
Ale vše co se nakreslí zmizí po změně rozlišení, jelikož není v Paint metodě
* Bonus *
g.smoothingMode = smoothingMode.HighQuality - Zapne vykreslovaní
Více zde
Metody
Používá se souřadnicový systém, který je umístěn v 0,0 a to v levém horním rohu
Pozor na odsazování
Pozor na odsazování
- draw - Obrys
- fill - Vylní
/* Vykreslí obrys obdelníku
Obrys: Červeny
X: 10
Y: 10
Width: 100
Height: 200
*/
g.drawRectangle(pens.red, 10,10,100,200)
/* Vykreslí plnou elipsu (kruh)
Vypln: zelený
X: 10
Y: 10
Width: 90
Height: 100
*/
g.fillElipse(Brushes.Green, 10,10,90,100)
Další metody
- Arc - Vykreslí oblouk
- Curve - Dlouhá čára
- DrawImage - Vykreslí obrazek
- DrawLine - Udělá přímku
- DrawPie - Kolač
- DrawRectangle - Obdelník
- DrawPolygon - trojúhelnik
- DrawString - text
Pen a brush
Pen = na čary
Brush = na kreslení
Pokud napíšeme pens nebo brushes tak existují předpřipravené
a pen je na objekty, který májí v nápisu draw
Brush = na kreslení
Pokud napíšeme pens nebo brushes tak existují předpřipravené
Vlastní kreslení
Pro vlastní barvy je zapotřebí si vytvořit vlastní barvu zapomoci ARGB, nebo HEX.
// Vytvoří RGB barvu
Color redColor = Color.FromArgb(255, 0, 0);
// Z hex
Color white = ColorTranslator.FromHtml("#fff");
Po vytvoření barvy, máme možnost udělat bud tužku(pen) nebo štětec(brush).
// Vytvoří tužku o tloušce 10px s barvou černá
Pen p = new Pen(Color.Black, 10);
// Vytvoří brush s barvou černá, která je jen čistá černá barva
Brush b = SolidBrush(Color.Black)
/*
Brush je abstraktní třída, nelze vyvolat.
Musime používat instance,
které dětí z brush jako je například SolidBrush
*/
Pamatujete, že Brush je na objekty který mají v nápisu filla pen je na objekty, který májí v nápisu draw
DrawString
Přes drawString mužeme psát text na obrázky.
K tomu, abychom mohly zapisovat je potřeba vytvořit instanci font
Font potřebuje zadat jeho název a velikost v pixelech, která se udává jako float
Například font "Arial"
Abychom zjistili velikost daného stringu při vykreslení se nám nabízí více možností.
Příklady takých fontu:
SizeF znamená Size ve Float. Obsahuje vlastnosti width a height
K tomu, abychom mohly zapisovat je potřeba vytvořit instanci font
Font potřebuje zadat jeho název a velikost v pixelech, která se udává jako float
Například font "Arial"
Font ourFont = new Font("Arial", 30f);
g.DrawString("Text", ourFont, Brushes.Black, 50, 50);
Bohužel při vykreslováním je jedna věc, která nám celkem ztěžuje práci se stringama v grafice nevíme jak velký jsou.Abychom zjistili velikost daného stringu při vykreslení se nám nabízí více možností.
Proporcionální font
Jedná se o font, který má každý znak stejně veliky, tudiž nám dovoluje odhadnout velikost stringu jen podle velikosti písma a délky stringu.Příklady takých fontu:
- Consolas
- Andale Mono
g.MessureString
V grafice existuje metoda g.MessureString, která vráti sizeFSizeF znamená Size ve Float. Obsahuje vlastnosti width a height
g.MeasureString("Text", ourFont);
Vycentrovani textu
Vycentrování textu se zda jako velmi obtížný úkol v GUI, jelikož bez hlubších vědomosti musime používat matematiku, ovšem tohle celý mužeme přeskočit s použitím StringFormat
// Vytvoříme font
Font ourFont = new Font("Arial", 15f);
// Vytvoříme obedelník
Rectangle obdelnik = new Rectangle(
x: 50,
y: 50,
width: 200,
height: 100
);
// Nakreslíme obedeník
g.DrawRectangle(Pens.Black,obdelnik);
// Format stringu
StringFormat sr = new StringFormat();
sr.Alignment = StringAlignment.Center;
sr.LineAlignment = StringAlignment.Center;
//Vykreslíme obdelník
g.DrawString("Pokus",ourFont,Brushes.Black,obdelnik,sr);
Práce s obrázky
v Gui máme možnost tvořit takzvané prázné plátna (alias bitmap), které nám dovolují nakreslit něco a pak následně uložit jako png nebo jpg.
Mužeme vytvořit jako prázné plátno (průhldné), nebo mužeme už začít od obrázku.
Mužeme vytvořit jako prázné plátno (průhldné), nebo mužeme už začít od obrázku.
// Vytvoříme plátno
Bitmap bmp = new Bitmap(width,height);
// Získáme grafiku
Graphics g = Graphics.FromImage(bmp)
// Uložíme obrázek
bmp.save(@"C:/User/obrazek.png")
Souřadnicový system
- g.translateTransform(50,100) - Posun stredu souradnicového systému
- g.rotateTransoform(30) - otačení o 30 stupňů středu souřadnicohé systému
- g.scaleTransofrm() - škálování souřadnicového systému násobení
- g.resetTransofrm() - resetuje