Mam pewne dane binarne, które chcę zapisać jako obraz. Kiedy próbuję zapisać obraz, zgłasza wyjątek, jeśli strumień pamięci użyty do utworzenia obrazu został zamknięty przed zapisaniem. Powodem, dla którego to robię, jest to, że dynamicznie tworzę obrazy i jako takie ... muszę użyć strumienia pamięci.
to jest kod:
[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.
}
Czy ktoś ma jakieś sugestie, jak mogę zapisać obraz przy zamkniętym strumieniu? Nie mogę liczyć na to, że programiści będą pamiętać o zamknięciu strumienia po zapisaniu obrazu. W rzeczywistości programista nie miałby ŻADNEGO POMYSŁU, że obraz został wygenerowany przy użyciu strumienia pamięci (ponieważ dzieje się to w innym kodzie, gdzie indziej).
Jestem bardzo zmieszany :(
using
bloku. Myślę, że originalBinaryDataStream2
został automatycznie usunięty po zakończeniu użytkowania. A to spowodowałoby wyjątek.