[C#][Hilfe]

01/28/2012 23:49 Eliminator8391#1
Guten Abend,
ich wollte Fragen, ob mir jemand bei meinem Problem helfen könnte:
Ich möchte, dass auf ein bestimmten Bild (eg.bmp) ein Text (label1.Text) geschrieben wird, und anschließend als neue bitmap (eg_save.bmp) gespeichert wird. Leider Funktioniert das nicht so wie ich möchte.. deshalb bitte ich um Hilfe.

Hier mal mein Code
Soweit tut er alles, bis auf dass er den Text mit in die neue Bitmap speichert. Ich kenne mich jetzt nicht soo gut mit C# aus, also vergibt mir, wenn es eigenzlich ganz simpel ist.
Wäre toll, wenn mir bei dem Problem jemand helfen könnte, da ich einfach nicht schlau daraus werde.

E: in einem anderen Forum hat einer Dies geschrieben:

Image-Objekt aus deinem Bild erstellen
Graphics-Objekt vom Image-Objekt erstellen
Graphics.DrawString verwenden
Graphics disposen
Image saven
Image disposen

den bisherigen Code habe ich dadurch und viel Google und dem Galileo-Computing C# Buch geschrieben..

mfg
Marcel
01/29/2012 13:06 Muddy Waters#2
Dein ganzer Ansatz mit dem Paint Event ist etwas seltsam. Wenn du nur Bilder verändern möchtest, die du aus einer Datei lädst, ist das eigentlich unnötig. Stattdessen kannst du einfach das Bild laden, das dazugehörige Graphics Objekt instanziieren, mit diesem auf dem Bild zeichnen und das Bild im Anschluss speichern.

Das könnte dann in etwa so aussehen:
Code:
private bool DrawString()
{
	string basePath = Application.StartupPath + "\\eg.bmp";
	string savePath = Application.StartupPath + "\\eg_save.bmp";

	SolidBrush pinsel = new SolidBrush(Color.Black);
	Font f = new Font("Arial", 16);
	Pen stift = new Pen(Color.Black, 2);
   
	try
	{
		Image newImage = Image.FromFile(basePath);
		Graphics g = Graphics.FromImage(newImage);
		g.DrawString("Test", f, pinsel, 10, 10);
		newImage.Save(savePath);

		return true;
	} catch(Exception) {}

	return false;
}
01/29/2012 16:04 Eliminator8391#3
Vielen Dank für deine antwort. Ich habs jetzt hinbekommen:
01/29/2012 16:34 Muddy Waters#4
Zwei Anmerkungen dazu:
  1. Ein konstanter Rückgabewert (hier: true) macht keinen Sinn. Wenn du das so umsetzt, sollte die Funktion void zurückgeben.
  2. Du brauchst dein Bild nicht erst als JPEG speichern und dann laden. Mit der Image Klasse hast du ja schon eine abstrakte, recht generische Klasse an der Hand, somit reicht es wenn du dir per Image.FromFile() ein Image Objekt instanziierst, dieses dann veränderst und einfach beim Speichern das gewünschte Format festlegst, sprich:
    Code:
    newImage.Save(savePath, ImageFormat.Jpeg);
01/29/2012 16:48 Eliminator8391#5
Okay, danke. Ich habs einfach mal so gelassen, da es so Funktioniert hat :)
Ich glaube, man kann den Thread nun closen, da die Frage beantwortet wurde.
Nochmals vielen Dank!
mfg