मुझे कुछ बाइनरी डेटा मिले हैं जो मैं एक छवि के रूप में सहेजना चाहता हूं। जब मैं छवि को बचाने की कोशिश करता हूं, तो यह एक अपवाद को फेंक देता है यदि छवि बनाने के लिए उपयोग की जाने वाली मेमोरी स्ट्रीम को सहेजने से पहले बंद कर दिया गया था। ऐसा करने का कारण यह है क्योंकि मैं गतिशील रूप से चित्र बना रहा हूं और जैसे कि .. मुझे मेमोरी स्ट्रीम का उपयोग करने की आवश्यकता है।
यह कोड है:
[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.
}
क्या किसी के पास कोई सुझाव है कि मैं एक छवि को कैसे बंद धारा के साथ बचा सकता हूं? मैं छवि को सहेजे जाने के बाद स्ट्रीम को बंद करने के लिए याद रखने के लिए डेवलपर्स पर भरोसा नहीं कर सकता। वास्तव में, डेवलपर के पास कोई आईडीईए नहीं होगा कि छवि एक मेमोरी स्ट्रीम का उपयोग करके उत्पन्न हुई थी (क्योंकि यह किसी अन्य कोड में होता है, कहीं और)।
मैं वास्तव में उलझन में हूँ :(
using
। ब्लॉक के अंदर रखें । मुझे लगता originalBinaryDataStream2
है कि उपयोग के अंत में स्वचालित रूप से निपटारा किया गया था। और वह अपवाद को फेंक देगा।