2009-05-08 16 views
1

Hallo Ich versuche, ein Bitmap-Bild in einem grundlegenden Bildbearbeitungsprogramm zu speichern.Überschreiben einer Bilddatei (Bitmap)

Hier ist der Code:

  // then save it 
     ImageBoxInApp.Image.Save(filename); 

[EDIT] Und öffne ich das Bild mit diesen

openFileDialog1.Title = "Select an Image"; 
     openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      filename = openFileDialog1.FileName; 
      Image img = System.Drawing.Image.FromFile(filename); 

Also, wenn ich versuche, diese erhalte ich ein . So fand ich einen solution auf diese und es sieht wie folgt aus:

 // Delete existing file first 
     System.IO.File.Delete(filename); 
     // then save it 
     ImageBoxInApp.Image.Save(filename); 

Aber wenn ich versuche, dies zu tun erhalte ich eine andere Fehlermeldung, dass die Datei, die ich löschen bin, ist derzeit offen. Das liegt daran, dass dies die Datei ist, die ich bearbeiten möchte.

Wie schließe ich die Datei, ohne die Anwendung tatsächlich zu schließen? Oder gibt es eine alternative Lösung?

Danke!

Antwort

1

Es ist schwer zu sagen, ohne zu sehen, die Datei einige Kontext um, wie Ihr Laden, aber hier sind ein paar Vorschläge:

  1. Vor dem Speichern, kopieren Sie das vorhandene Bild in ein neues Bild, das Original schließen, führen Löschen und speichern Sie die Kopie.
  2. Speichern Sie die Datei unter einem zufälligen Dateinamen, löschen Sie das Original, benennen Sie die zufällig benannte Datei in den ursprünglichen Namen um.
  3. Laden Sie die Datei in einen Speicherstream und verwenden Sie die Kopie im Speicher, um das Bild zu initialisieren.

Ich würde persönlich mit Option # 3 für die meisten Fälle gehen. Vergessen Sie nicht, das Bild nach der Verwendung zu entfernen. Am besten können Sie es in einen using() -Block einbinden.

+0

4. Anstatt ein Bild aus einem Dateinamen zu erstellen, erstellen Sie ein Bild aus dem Stream, der aus dem Dateinamen erstellt wurde, und schließen Sie den Stream nach dem Erstellen von Image (vorzugsweise mit block). Das funktionierte für mich und scheint mir besser. – sluki