VB.NET – Aggiungere del testo in sovraimpressione ad un’immagine
Inizio con questo articolo una serie di piccoli e semplici espedienti per manipolare le immagini con Visual Basic.NET. In questo appuntamento vedremo come è semplice aggiungere una scritta personalizzata ad un’immagine. Iniziamo dapprima ad importare lo spazio dei nomi drawing:
Imports System.Drawing Imports System.Drawing.Drawing2D |
Dopodichè abbiamo bisogno di un’immagine da manipolare, supponiamo pertanto di avere una PictureBox chiamata PictureBox1, contenente l’immagine sulla quale vogliamo apporre del testo personalizzato.
Nota:
Potete caricare un’immagine a runtime nella picturebox utilizzando ad esempio l’istruzione:
PictureBox1.Image = Image.FromFile("test.bmp")oppure potete fare una cosa molto più raffinata includendo un OpenFileDialog dal quale l’utente può scegliere l’immagine da selezionare, ma questo esula dallo scopo di questo tutorial.
Definiamo quindi le variabili di cui abbiamo bisogno per lavorare:
Dim testo As String = "Testo in sovraimpressione" Dim grandezzaTesto As SizeF Dim temp As Graphics Dim myFont As New Font("Tahoma", 10, FontStyle.Regular) Dim xLocation, yLocation As Single |
Come è facile da intuire… “Testo” è la variabile che andrà a contenere la stringa da sovraimporre all’immagine (che magari possiamo anche recuperare da una textbox).
La variabile grandezza, dichiarata come SizeF, è in realtà un’oggetto che contiene una coppia di numeri a virgola mobile e viene comunemente utilizzato per immagazzinare le dimensioni (larghezza e altezza) di un rettangolo.
La variabile Temp dichiara un oggetto di tipo Graphics che ci permette di effettuare questo tipo di elaborazione sull’immagine.
Creiamo quindi un’istanza dell’oggetto myFont per definire il font che vogliamo utilizzare per il testo da sovraimporre.
Definiamo quindi due variabili xLocation e yLocation per il posizionamento del riquadro contenente il testo.
Passiamo quindi alla fase di sovraimpressione:
temp = PictureBox1.CreateGraphics() grandezzaTesto = temp.MeasureString(testo, myFont) xLocation = (PictureBox1.Image.Width - grandezzaTesto.Width) yLocation = (PictureBox1.Image.Height - grandezzaTesto.Height) temp.DrawString(testo, myFont, Brushes.Lime, xLocation, yLocation) |
La prima istruzione crea in pratica l’oggetto Graphics a partire dall’immagine contenuta nella picturebox. Ricaviamo quindi le dimensioni (larghezza e altezza) del riquadro che contiene il testo. Impostiamo quindi le due variabili per il posizionamento.
Nota:
Utilizzando:
xLocation = (PictureBox1.Image.Width - grandezzaTesto.Width) yLocation = (PictureBox1.Image.Height - grandezzaTesto.Height)il testo verrà posizionato in basso a destra sull’immagine. Impostando invece a zero queste due variabili, il testo verrà posizionato in alto a sinistra. Per altri posizionamenti basta un po di fantasia.
Utilizziamo infine il metodo DrawString dell’oggetto Graphics per poter disegnare il testo nell’immagine. Al metodo DrawString vanno passati: la stringa contenente il testo, l’oggetto font, il colore da utilizzare per il testo (che è un’enumerazione dell’oggetto Brushes) e quindi le coordinate per definirne il posizionamento.
Il codice completo, da associare magari sull’evento Click di un pulsante o a un’altra routine a scelta, è il seguente:
Dim testo As String = "Testo in sovraimpressione" Dim grandezzaTesto As SizeF Dim temp As Graphics Dim myFont As New Font("Tahoma", 10, FontStyle.Regular) Dim xLocation, yLocation As Single temp = PictureBox1.CreateGraphics() grandezzaTesto = temp.MeasureString(testo, myFont) xLocation = (PictureBox1.Image.Width - grandezzaTesto.Width) yLocation = (PictureBox1.Image.Height - grandezzaTesto.Height) temp.DrawString(testo, myFont, Brushes.Lime, xLocation, yLocation) |