Laden...

picturebox.Graphics als Bild Speichern (.png o.ä.)

Erstellt von userid9077 vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.896 Views
U
userid9077 Themenstarter:in
21 Beiträge seit 2007
vor 13 Jahren
picturebox.Graphics als Bild Speichern (.png o.ä.)

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);
L
95 Beiträge seit 2009
vor 13 Jahren

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

F
155 Beiträge seit 2009
vor 13 Jahren

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

U
userid9077 Themenstarter:in
21 Beiträge seit 2007
vor 13 Jahren

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

4.939 Beiträge seit 2008
vor 13 Jahren

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.

U
userid9077 Themenstarter:in
21 Beiträge seit 2007
vor 13 Jahren

Uuups.
Danke!
(jetzt gehts)