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
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í
  • draw - Obrys
  • fill - Vylní
Příklady:
    
/* 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
Pen a brush
Pen = na čary
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 fill
a 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"
    
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 sizeF
SizeF 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.
    

// 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