J'ai le problème suivant. Je veux faire des graphiques en image bitmap comme une forme de lien
je peux écrire un texte dans l'image
mais j'écrirai plus de texte dans différentes positions
Bitmap a = new Bitmap(@"path\picture.bmp");
using(Graphics g = Graphics.FromImage(a))
{
g.DrawString(....); // requires font, brush etc
}
Comment puis-je écrire du texte et l'enregistrer, et écrire un autre texte dans l'image enregistrée.
Pour dessiner plusieurs chaînes, appelez graphics.DrawString
plusieurs fois. Vous pouvez spécifier l'emplacement de la chaîne dessinée. Cet exemple, nous allons dessiner deux chaînes "Bonjour", "Word" ("Bonjour" en bleu en amont "Word" en rouge):
string firstText = "Hello";
string secondText = "World";
PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);
string imageFilePath = @"path\picture.bmp"
Bitmap bitmap = (Bitmap)Image.FromFile(imageFilePath);//load the image file
using(Graphics graphics = Graphics.FromImage(bitmap))
{
using (Font arialFont = new Font("Arial", 10))
{
graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
}
}
bitmap.Save(imageFilePath);//save the image file
Edit: "J'ajoute une charge et sauvegarde le code".
Vous pouvez ouvrir le fichier bitmap à tout moment Image.FromFile
, et dessinez un nouveau texte dessus en utilisant le code ci-dessus. puis enregistrez le fichier image bitmap.Save
Voici un exemple d'appel à Graphics.DrawString
, tiré de ici :
g.DrawString("My\nText", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0));
Il repose évidemment sur une police appelée Tahoma
installée.
La classe Brushes
possède de nombreux pinceaux intégrés.
Voir aussi, la page MSDN pour Graphics.DrawString
.
Pour enregistrer les modifications dans le même fichier, j'ai dû combiner la réponse de Jalal Said et la réponse de NSGaga sur la question this . Vous devez créer un nouvel objet Bitmap basé sur l'ancien, supprimer l'ancien Bitmap , puis enregistrez en utilisant le nouvel objet:
string firstText = "Hello";
string secondText = "World";
PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);
string imageFilePath = @"path\picture.bmp";
Bitmap newBitmap;
using (var bitmap = (Bitmap)Image.FromFile(imageFilePath))//load the image file
{
using(Graphics graphics = Graphics.FromImage(bitmap))
{
using (Font arialFont = new Font("Arial", 10))
{
graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
}
}
newBitmap = new Bitmap(bitmap);
}
newBitmap.Save(imageFilePath);//save the image file
newBitmap.Dispose();