2009-08-05 14 views
0

Ich habe es geschafft, etwas in einem anderen Projekt zu arbeiten, aber nicht auf meinem aktuellen. Die Datei wird gesperrt und kann beim erneuten Speichern nicht überschrieben werden, obwohl ich vor dem Aufruf von save das Bitmap b entsondere. Irgendeine Idee von dem, was ich falsch machen könnte?GDI + Fehler auf Bitmap.Save

Bitmap b = (Bitmap)Image.FromFile("image.png"); 
Bitmap bClone = (Bitmap)b.Clone(); 

    // modify bClone here.. 

b.Dispose(); 
b = null; 
GC.Collect(); 

bClone.Save("image.png"); 
+0

FYI, Dispose() wird sofort den Speicher Ihrer Bitmap freigeben. Der Aufruf von GC.Collect() ist unnötig und wird im Allgemeinen ignoriert. –

+0

Danke, ich wusste das nicht. – CodeSpeaker

Antwort

1

Die "Clone" -Methode macht nicht, was Sie wollen. Sie können stattdessen den Kopierkonstruktor des Bitmap verwenden, um ein separates Bild zu erstellen, das die gleichen Pixel enthält.

Bitmap bClone = null; 
using (Bitmap b = (Bitmap)Image.FromFile("image.png")) 
{ 
    bClone = new Bitmap(b); 
    // modify bClone here.. 
} 

bClone.Save("image.png"); 
bClone.Dispose(); 
+0

Was macht die Klon-Methode? :) –

0

Mit FromFile haben Sie wirklich keine Kontrolle über die Lebensdauer des Dateiobjekts. Probiere stattdessen FromStream aus.

Verwandte Themen