domenica 6 aprile 2008

Disegnare una stringa di testo sopra un oggetto Image con C# e VB.NET

Ogni tanto, quando posso cerco di imparare qualche cosa di nuovo, questa volta ho giocato un pò con immagini e stringhe.

Per la realizzazione ho utilizzato le classi di System.Drawing:

C#

/// <summary>
/// Caricamento immagine da file
/// </summary>
/// <param name="nomeFile">File contenente l'immagine</param>
/// <returns></returns>
System.Drawing.Image CaricaImmagine (string nomeFile)
{
       using (Bitmap img = new Bitmap(nomeFile))
                          return new Bitmap(img);
}

/// <summary>
/// Disegna testo sopra un'immagine
/// </summary>
/// <param name="nomeFile">Nome file contenente l'immagine</param>
/// <param name="testo">Testo da disegnare nell'immagine</param>
/// <returns>Image</returns>
public System.Drawing.Image DrawTestoSuBitmap(string nomeFile, string testo)
{
       // recupero immagine
       Image imageFile = this.CaricaImmagine(nomeFile);
       // creazione di un oggetto di tipo Graphics
       Graphics g = Graphics.FromImage(imageFile);                   

       g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

  // Da msdn
 
// Creazione del pennello e scelta del colore
  SolidBrush drawBrush = new SolidBrush(Color.Black);
  // generazione font da utilizzare
  System.Drawing.Font drawFont = this.Font;
 
if (drawFont == null)
 
{
     drawFont = new System.Drawing.Font("Courier", 20,System.Drawing.FontStyle.Regular);
  }           

       // Generazione del punto di posizionamento del testo
       PointF drawPoint = new PointF(10.0F, 100.0F);
       // se si è passato un testo vuoto non si fa nulla
       if (!string.IsNullOrEmpty(testo))
             g.DrawString(testo,drawFont, drawBrush, drawPoint);
       // rigeneriamo l'oggetto Image modificato
       g.DrawImage(imageFile,new Point(0,0));
       // restituzione Image all'oggetto chiamante
       return imageFile;
}

VB.NET

''' <summary>
''' Caricamento immagine da file
''' </summary>
''' <param name="nomeFile">File contenente l'immagine</param>
''' <returns></returns>
Private Function CaricaImmagine(ByVal nomeFile As String) As System.Drawing.Image
       Using img As New Bitmap(nomeFile)
             Return New Bitmap(img)
       End Using
End Function

''' <summary>
''' Disegna testo sopra un'immagine
''' </summary>
''' <param name="nomeFile">Nome file contenente l'immagine</param>
''' <param name="testo">Testo da disegnare nell'immagine</param>
''' <returns>Image</returns>

Public Function DrawTestoSuBitmap(ByVal nomeFile As String, ByVal testo As String) As System.Drawing.Image
       ' recupero immagine
       Dim imageFile As Image = Me.CaricaImmagine(nomeFile)
       ' creazione di un oggetto di tipo Graphics
       Dim g As Graphics = Graphics.FromImage(imageFile)

       g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias 

       ' Da msdn
       ' Creazione del pennello e scelta del colore
       Dim drawBrush As New SolidBrush(Color.Black)
       ' generazione font da utilizzare

       Dim drawFont As System.Drawing.Font = Me.Font
       If drawFont Is Nothing Then
             drawFont = New System.Drawing.Font("Courier", 20, System.Drawing.FontStyle.Regular)
       End If

       ' Generazione del punto di posizionamento del testo
       Dim drawPoint As New PointF(10F, 100F)
       ' se si è passato un testo vuoto non si fa nulla
       If Not String.IsNullOrEmpty(testo) Then
             g.DrawString(testo, drawFont, drawBrush, drawPoint)
       End If

       ' rigeneriamo l'oggetto Image modificato
       g.DrawImage(imageFile, New Point(0, 0))
       ' restituzione Image all'oggetto chiamante
       Return imageFile
End Function

Nessun commento: