hi
ich male auf der graphic g von einer pictureBox rum.
die möchte ich dann als Bild speichern.
Wie geht das?
Graphics g = pictureBox1.CreateGraphics();
g.Clear(Color.White);
g.DrawString(titel, font, Brushes.Black, 10, 10);
Ich würde es so machen:
Das was in der Paint steht, verschiebst du in eine eigene Methode -->
public void RenderBox(Graphics renderTarget)
{
// Zeichnen mit renderTarget
}
in der Paint:
RenderBox(e.Graphics);
und zum speichern:
public void Save(string path)
{
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics graphics = Graphics.FromImage(bitmap);
RenderBox(graphics);
using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
}
}
So sollte es gehen! 😉
Und vergiss das "using System.IO;" nicht! 😉
Lg Marc
Edit: Vergiss das mit dem CreateGraphics! Nimm lieber die Paint-Methode der PictureBox, da bekommst du über "e.Graphics" schon was mitgeliefert 😉
Lg
"We better hurry up and start coding, there are going to be a lot of bugs to fix."
was mach ich da noch falsch?
private void button1_Click(object sender, EventArgs e)
{
//PAINT
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString(Environment.CurrentDirectory +@"\asd.bmp", DefaultFont, Brushes.SaddleBrown, 10, 10);
}
private void button2_Click(object sender, EventArgs e)
{
//SAVE
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics graphics = Graphics.FromImage(bitmap);
using (Stream stream = new FileStream(@"\asd.bmp", FileMode.Create, FileAccess.Write))
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
}
}
EDIT: was er speichert ist ein schwarzes bild in den richtigen dimensionen
Du speicherst ja auch einfach eine leere (neue) Bitmap mit der Größe deiner PictureBox 😉
Darum hat levitas ja extra die Methode 'RenderBox(graphics);' noch mal aufgerufen...
Lies dir am besten das Tutorial in Ruhe durch.
Und wenn du nur selber etwas zeichnen willst (und kein fertiges Bild (=Image) anzeigen), dann nimm statt der PictureBox einfach ein Panel.