ฉันมีข้อมูลไบนารีที่ต้องการบันทึกเป็นรูปภาพ เมื่อฉันพยายามบันทึกภาพมันจะเกิดข้อยกเว้นหากสตรีมหน่วยความจำที่ใช้สร้างภาพถูกปิดก่อนบันทึก เหตุผลที่ฉันทำเช่นนี้เพราะฉันสร้างภาพแบบไดนามิกและด้วยเหตุนี้ .. ฉันจำเป็นต้องใช้สตรีมหน่วยความจำ
นี่คือรหัส:
[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
มันถูกกำจัดโดยอัตโนมัติเมื่อสิ้นสุดการใช้งาน และนั่นจะทำให้เกิดข้อยกเว้น