Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question facile sur Image

6 réponses
Avatar
Jean-Luc M.
Bonjour,

C'est surement tout bète mais je ne trouve pas la solution.

Comment écrire un texte sur une image chargée dans un objet Image et
sauvegarder l'image ainsi modifiée ?

Merci d'avance !

J-L

--
Jean-Luc M.

6 réponses

Avatar
Jérémy Jeanson
Il faut créer un bitmap, utiliser un objet graphics pour dessiner ton
image sur ce bitmap, ensuite tu ecris ton text avec ce même objet
graphics et pour finir tu enregistre ton bitmap et le tour est joué.

Si tu as besoin d'un exemple, dis le, je pourrai t'en coder un dès que
j'aurai un Visual Studio sous la main, mais je crois que la manip que je
viens de t'indiquer est en partie présente dans la MSDN (c'est du GDI)

Pour résumé tu as besoin de 3 classes présentes dans System.Drawing ou
Drawing2D : Bitmap, Image, Graphics.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
J-L
Jérémy Jeanson avait énoncé :
Il faut créer un bitmap, utiliser un objet graphics pour dessiner ton image
sur ce bitmap, ensuite tu ecris ton text avec ce même objet graphics et pour
finir tu enregistre ton bitmap et le tour est joué.

Si tu as besoin d'un exemple, dis le, je pourrai t'en coder un dès que
j'aurai un Visual Studio sous la main, mais je crois que la manip que je
viens de t'indiquer est en partie présente dans la MSDN (c'est du GDI)

Pour résumé tu as besoin de 3 classes présentes dans System.Drawing ou
Drawing2D : Bitmap, Image, Graphics.



J'aurais du préciser un peu mieux mon problème.
En fait, je sais qu'il faut utiliser un Graphics mais si je trouve une
méthode CreateGraphics sur les contrôles (par exemple sur un Form), je
ne trouve aucune méthode équivalente sur Bitmap ou Image. A part un
GetHBitmap qui, si j'ai bien compris, m'obligerait à utiliser des API
win32 pour travailler dessus. Le problème serait donc de savoir
comment créer ce Graphics.

Par contre, ton explication me fait soulever une question.

Est-ce que je dois obligatoirement créer un nouveau bitmap pour y
dessiner mon image originale et mon texte avant de sauvegarder ?
N'est-il pas possible de charger un bitmap, y ajouter un texte et le
sauvegarder sous un autre nom ?

Merci de ton intervention :-)
Avatar
Jérémy Jeanson
Voici un petit exemeple qui devrait répondre clairement à tes questions:

// Path vers l'image
String path = "...";

// Chargement de l'image à dessiner
Image image = Image.FromFile(path);

// Création du bitmap pour réaliser le dessin
Bitmap bmp = new Bitmap(
image.Width,
image.Height);

// Créatio ndu graphics pour dessiner
Graphics g = Graphics.FromImage(bmp);

// On dessine l'image
g.DrawImage(image, 0, 0);

// On ajoute un text
g.DrawString("Mon texte", this.Font, Brushes.Black, new PointF(0, 0));

bmp.Save(path);


PS : notes au passage qu'image est une classe abstraite qui ne peut être
instanciée par un new et bitmap n'a rien à voir avec BMP, c'est l'objet
utilisable pour tracer des images... ce sont des concepts à garder ne
tête pour comprendre GDI, et j'avoue que la première fois ce n'est pas
évidant à comprendre.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
J-L
Graphics.FromImage

Voilà ce que je n'avais pas trouvé. :-)

J'écris le code suivant:

Bitmap bmpsource = new Bitmap(@"D:DocumentsMes images0012278.jpg");
Bitmap bmpDestin = new Bitmap(bmpsource.Width, bmpsource.Height);
Graphics g = Graphics.FromImage(bmpDestin);
g.DrawImage(bmpsource, new Point(0,0));

StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);

format1.LineAlignment = StringAlignment.Near;
format1.Alignment = StringAlignment.Center;

String s = "JUSTEnUNnESSAInPOURnVERIFIER";
SizeF F = g.MeasureString(s, this.Font, new PointF(0, 0), format1);
MessageBox.Show(F.ToString());

g.DrawString(s, this.Font, new System.Drawing.SolidBrush(Color.White),
new PointF(F.Width / 2, 0F), format1);

bmpDestin.Save("C:Test.jpg");

System.Diagnostics.Process.Start(@"C:Test.jpg");


Ca fonctionne impeccablement, merci !

Par contre, un truc que je ne comprends pas, c'est que je charge un
jpg, , j'écris mon jpg dans mon bitmap, j'enregistre avec une extension
jpg.
Quand irfanview ouvre mon image, il me dit que c'est un png avec une
extension incorrecte et me propose de le renommer en .png.

C# ferait-il automatiquement des png ?
Avatar
Jérémy Jeanson
Normal :) enfin si tu ne touches pas aux surcharges de la méthode Save

Exemple pour avoir un jpeg:
bitmap.Save("...", System.Drawing.Imaging.ImageFormat.Jpeg);

--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Avatar
J-L
Après mûre réflexion, Jérémy Jeanson a écrit :
Normal :) enfin si tu ne touches pas aux surcharges de la méthode Save

Exemple pour avoir un jpeg:
bitmap.Save("...", System.Drawing.Imaging.ImageFormat.Jpeg);



Excellent ce truc ! Merci !

Quand je pense au temps et au nombreuses lignes de code que ça me
prenait pour faire la même chose avec Delphi, je me dis que le progrès
a du bon.