[C#] Bild von PictureBox speichern

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • [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:

    Source Code

    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.

    Source Code

    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. }
    Display All


    Source Code

    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. }
    Display All


    Grüße,
    Nikolai