Image.Save (..) löst eine GDI + -Ausnahme aus, weil der Speicherstrom geschlossen ist

Ich habe einige Binärdaten, die ich als Bild speichern möchte. Wenn ich versuche, das Bild zu speichern, wird eine Ausnahme ausgelöst, wenn der zum Erstellen des Bildes verwendete Speicherstrom vor dem Speichern geschlossen wurde. Der Grund, warum ich das tue, ist, dass ich dynamisch Bilder erstelle und daher einen Speicher-Stream verwenden muss.

dies ist der Code:

[TestMethod]
public void TestMethod1()
{
    // Grab the binary data.
    byte[] data = File.ReadAllBytes("Chick.jpg");

    // Read in the data but do not close, before using the stream.
    Stream originalBinaryDataStream = new MemoryStream(data);
    Bitmap image = new Bitmap(originalBinaryDataStream);
    image.Save(@"c:\test.jpg");
    originalBinaryDataStream.Dispose();

    // Now lets use a nice dispose, etc...
    Bitmap2 image2;
    using (Stream originalBinaryDataStream2 = new MemoryStream(data))
    {
        image2 = new Bitmap(originalBinaryDataStream2);
    }

    image2.Save(@"C:\temp\pewpew.jpg"); // This throws the GDI+ exception.
}

Hat jemand Vorschläge, wie ich ein Bild mit geschlossenem Stream speichern könnte? Ich kann mich nicht darauf verlassen, dass die Entwickler daran denken, den Stream zu schließen, nachdem das Bild gespeichert wurde. Tatsächlich hätte der Entwickler KEINE Ahnung, dass das Bild mithilfe eines Speicherstroms generiert wurde (da es in einem anderen Code an einer anderen Stelle vorkommt).

Ich bin wirklich verwirrt :

Antworten auf die Frage(28)

Ihre Antwort auf die Frage