[C#] Bild von PictureBox speichern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [C#] Bild von PictureBox speichern

    Hallo an alle,

    da Thema gibt es schon zig mal im Internet. Entweder habe ich einen Knoten im Hirn oder irgendwas geht schief...

    Ich habe eine Picturebox. Da zeichne ich mit Graphics. Das Zeichnen selbst wird in dem Paint Event ausgeführt, sodass e.Graphics als Graphic-Element dient.

    Das Zeichnen funktioniert tadellos. Wenn ich es jedoch ein Bild speichern will....

    egal wo ich versuche ein Bitmap anzulegen - in dem event selbst, in der Methode, die vom Event aufgerufen wird, nachträgtlich mit variablenzwischenspeicherung - ich kriege immer schwarzes Bild.
    Habe schon versucht e.Graphics.Save zu machen - nutzlos. Überlegt ob ich eventuell den Graphics erstmal freigeben muss - fehlanzeige

    meine Struktur bis jetzt:

    Quellcode

    1. private void pcb_paint_Paint(object sender, PaintEventArgs e) {
    2. if (Globals.isParsed) {
    3. visualizeGraph(e.Graphics);
    4. Bitmap bild = new Bitmap(this.Width, this.Height, e.Graphics);
    5. bild.Save("C:/test.jpeg", ImageFormat.Jpeg);
    6. }
    7. }


    Ich habe gelesen dass man das Bild als Image-Attribut bei PictureBox ablegen muss - einmalig wäre es ok, aber wenn ich das fest einprogrammiere, dass es bei jedem Paint-Event mir das hin und her in Image konvertiert - dauert es einfach zu lange...

    Ab und zu fliegt "allgemeiner Fehler in der GDI+" raus...

    Vielleicht ist die Lösung einfacher als ich es mir vorstelle...

    ich danke für jeden Lösungsansatz.

    mfG, Nikolai
  • Das Thema hat sich erledigt.

    Quellcode

    1. private void pcb_paint_Paint(object sender, PaintEventArgs e) {
    2. if (Globals.isParsed) {
    3. // leeres Bild erzeugen
    4. Image emptyImage = new Bitmap(Globals.blattSize[0], Globals.blattSize[1]);
    5. // als Hintergrundbild der PictureBox setzen
    6. pcb_paint.BackgroundImage = emptyImage;
    7. // leeren Graphics nehmen von dem leeren Bild
    8. Graphics g = Graphics.FromImage(emptyImage);
    9. // nach Lust und Laune rummalen (g.Save() nach dem malen nicht vergessen; könnte bös enden, muss es aber nicht...)
    10. visualizeGraph(g);
    11. }
    12. }
    Alles anzeigen


    Quellcode

    1. private void cmd_pic_Click(object sender, EventArgs e) {
    2. SaveFileDialog dia = new SaveFileDialog();
    3. dia.Filter = "BMP|*.bmp|PNG|*.png|JPEG|*.jpeg|GIF|*.gif|ICON|*.ico|TIFF|*.tiff";
    4. dia.FilterIndex = 1;
    5. if(dia.ShowDialog() == System.Windows.Forms.DialogResult.OK){
    6. Bitmap bild = new Bitmap(pcb_paint.BackgroundImage);
    7. ImageFormat format;
    8. switch (dia.FilterIndex) {
    9. case 1:
    10. default:
    11. format = ImageFormat.Bmp;
    12. break;
    13. case 2:
    14. format = ImageFormat.Png;
    15. break;
    16. case 3:
    17. format = ImageFormat.Jpeg;
    18. break;
    19. case 4:
    20. format = ImageFormat.Gif;
    21. break;
    22. case 5:
    23. format = ImageFormat.Icon;
    24. break;
    25. case 6:
    26. format = ImageFormat.Tiff;
    27. break;
    28. }
    29. bild.Save(dia.FileName, format);
    30. }
    31. }
    32. }
    Alles anzeigen


    Grüße,
    Nikolai