Gestire oggetti grafici in C#
La classe Graphics contiene dei metodi Fill che servono a riempire il contenuto delle forme geometriche. Tali metodi funzionano esattamente come i metodi Draw con la differenza che essi richiedono un'istanza della classe Brush al posto di un'istanza della classe Pen. La classe Brush è astratta quindi è necessario istanziare una delle sue classi figlie.
Per esempio il codice seguente disegna un poligono solido con cinque lati
Graphics gs = this.CreateGraphics();
Brush b = new SolidBrush(Color.Blue);
Point[] punti = new Point[]
{new Point(10, 10),
new Point(10, 100),
new Point(50, 65),
new Point(100, 120),
new Point(105, 40)};
gs.FillPolygon(b, punti);
con il seguente risultato
Il .NET Framework fornisce anche diversi strumenti per lavorare su diversi formati di immagine. La classe astratta System.Drawing.Image permette di creare, caricare, modificare, e salvare immagini nei formati BMP, JPG e TIF.
La classe Image è astratta ma è possibile utilizzarla tramite i metodi Image.FromFile (che richiede come parametro il percorso di un file immagine) e Image.FromStream (che richiede come parametro un oggetto System.IO.Stream). E' inoltre possibile utilizzare altre due classi derivate da Image: la classe Bitmap per immagini statiche e la classe Metafile per immagini animate.
Bitmap è la classe più utilizzata per lavorare sulle immagini ed i differenti costruttori permettono di creare un oggetto Bitmap da un file esistente o da uno stream ma anche di creare un'immagine vuota con specifiche altezza e larghezza.
Per visualizzare su un form un'immagine salvata sul disco occorre caricarla tramite il metodo Image.FromFile ed istanziare un controllo PictureBox, settando la proprietà BackgroundImage di quest'ultimo con l'immagine caricata.Per effettuare una prova inseriamo in un form un controllo PictureBox (chiamiamolo testPb) e scriviamo il seguente codice (sempre nell'evento Paint del form)
Image im = Image.FromFile(@"C:\Tramonto.jpg");
testPb.BackgroundImage = im;
il risultato è il seguente (chiaramente dopo esserci assicurati che l'immagine che utilizziamo si trovi nella locazione indicata dal percorso passato al metodo FromFile)
Bitmap b = new Bitmap(Image.FromFile(@"C:\Tramonto.jpg"));
testPb.BackgroundImage = b;
In alternativa è possibile visualizzare un'immagine come sfondo di un form (quindi senza utilizzare un controllo PictureBox) utilizzando il metodo Graphics.DrawImage. Tale metodo ha trenta overloads attraverso cui si ha a disposizione una grande varietà di opzioni per specificare la posizione e la dimensione dell'immagine.Con il seguente codice si imposta l'immagine come background del form in modo da coprirlo tutto
Bitmap bm = new Bitmap(@"C:\tramonto.jpg");
Graphics g = this.CreateGraphics();
g.DrawImage(bm, 1, 1, this.Width, this.Height);
con il seguente risultato
Esempi tipici di icone sono quella di esclamazione, di informazione, di domanda e il modo più semplice di inserire una di esse in un form è quello di utilizzare il metodo Graphics.DrawIcon.
Scrivendo il seguente codice
Graphics g = this.CreateGraphics();
g.DrawIcon(SystemIcons.Error, 40, 40);
il risultato sarà
I metodi e le classi presentati nel presente articolo sono soltanto alcuni di quelli disponibili nel .NET Framework per la gestione di oggetti grafici. Ci sarebbero tanti altri i temi da approfondire, come evidenziato all'inizio dell'articolo, e probabilmente essi saranno oggetto di articoli futuri.