vendredi 2 mars 2012

Incorporer un texte dans une image

Aujourd'hui, petite astuce. Imaginez que vous possédez un panel d'images associées à des données mais que vu leur nombre il n'est pas toujours possible de créer une image différente pour chaque. Et bien la solution pourrai être de partir d'un corps commun et d'y ajouter le nom de la donnée de façon à pouvoir différencier les images une fois affichées dans le panel.



Tout d'abord, le traitement sur le texte à incorporer se fera via les lignes suivantes:
Font font = new Font("arial", 24, System.Drawing.FontStyle.Bold);
StringFormat format = new StringFormat {Alignment = StringAlignment.Center,
                                                    LineAlignment = StringAlignment.Center };

On extrait notre image commune et on la place dans une variable Image:
Image img = Image.FromFile("Lien vers le fichier image");
Image tmpImg = new Bitmap(img, img.Width, img.Height);
Graphics graphics = Graphics.FromImage(tmpImg);

Pour pouvoir contrôler l'endroit où le texte se situera sur l'image, on crée un rectangle (ou un point, un cercle, une ellipse, ...) dont les dimensions ne devront pas dépasser la résolution de l'image. Une petite marge permettra de ne pas voir le texte collé au bord. Ce qui donne pour une image en 300x180:
const float x = 10.0F;
const float y = 10.0F;
const float width = 280.0F;
const float height = 160.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);

On place tous ces ingrédients en commun pour obtenir notre résultat:
graphics.DrawString("Mon superbe texte à incorporer", font, Brushes.White, drawRect, format);

Comme il serait dommage de devoir recréer ces images à chaque fois, il serait intéressant de stocker notre image dans un fichier temporaire duquel il sera plus simple d'en extraire la donnée:
tmpImg.Save("Lien vers le fichier à créer");


peace and prosperity!

Aucun commentaire:

Enregistrer un commentaire