Announcement

Collapse
No announcement yet.

Speicherproblem mit Picturebox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Speicherproblem mit Picturebox

    Hallo,

    ich weise zur Laufzeit einer WindowsPictureBox ein Bild zu.
    Und zwar so:

    PictureBox1.Image = New Bitmap(pfad);

    Das Klappt so auch. Das Problem ist jedoch, dass dann das Bild, dass angezeigt wird, geöffnet ist, so dass man es z.B. mit Paint nicht speichern kann.

    Also habe ich folgendes Konstrukt:

    Bitmap TempBmp = new Bitmap(pfad);
    bmp = new Bitmap(TempBmp );
    PictureBox1Image = bmp;

    Jetzt kann man das Bild zwar in Paint öffnen und speichern, aber ich habe einen Speicherfresser, da zur Laufzeit zyklisch neue Bilder angezeigt werden (in einem Timer). Oben stehender Code erzeugt somit auch zyklisch neue Objekte die nicht aus dem speicher entfernt werden.

    Meine ist nun, wie kann ich ein Bild einer PictureBox so zu weisen, dass ich das Bild auch extern noch bearbeiten und speichern kann. Und dass ich nicht immer neue Objekt anlege.

    Hat jemand nen Tipp?

    Micha

  • #2
    Einfachste, nicht sehr elegante Lösung :

    Das Bild in System.IO.Path.GetTempPath() kopieren und von dort einbinden - meines Wissens wird dieser Pfad beim reboot wieder leergeräumt. Sauberer ist es natürlich, wenn man das Bild im Destruktor dann auch wieder löscht.

    Beste Grüße,

    Compu

    Comment


    • #3
      hi,

      danke für die antwort.
      wenn man das bmp.dispose(); aufruft, nachdem das bild der picturebox zugewiesen wurde gibts nen fehler, weil die picturebox die bmp noch nutzt?!

      Micha

      Comment


      • #4
        Du solltest wenn du in einem Timer ein neues Bild zuweist das alte mit einem Aufruf von Dispose() richtig freigeben. Das sollte den Speicherverbrauch zumindest reduzieren. Bei deinem im Code gezeigten TempBmp kannst du das auch nach der Zuweisung zur PictureBox sofort machen.

        Es könnte auch helfen das Bild nicht als erstes in ein Bitmap zu laden sondern erst nur in einen Filestream. Dann den Filestream dem Bitmap zuweisen und den Filestream freigeben(per Dispose()).

        Comment


        • #5
          wenn man das bmp.dispose(); aufruft, nachdem das bild der picturebox zugewiesen wurde gibts nen fehler, weil die picturebox die bmp noch nutzt?!
          Richtig. TempBmp solltest du freigeben können. bmp aber nicht. Die Picturebox legt sich ja intern nicht noch eine Copy des Bilds an.

          Comment

          Working...
          X