Abd*_*eem 11 c# dispose image stream
我有这个函数在函数中返回一个Image,使用Image.FromStream方法创建图像根据MSDN:
您必须在图像的生命周期内保持流打开
所以我没有关闭流(如果我关闭了蒸汽,则从返回的图像对象中抛出GDI +异常).我的问题是当在返回的Image上的其他地方调用Image.Dispose()时是否关闭/处理流
public static Image GetImage(byte[] buffer, int offset, int count)
{
var memoryStream = new MemoryStream(buffer, offset, count);
return Image.FromStream(memoryStream);
}
Run Code Online (Sandbox Code Playgroud)
正如其中一个答案中所建议的,使用不是要走的路,因为它会引发异常:
public static Image GetImage(byte[] buffer, int offset, int count)
{
using(var memoryStream = new MemoryStream(buffer, offset, count))
{
return Image.FromStream(memoryStream);
}
}
public static void Main()
{
var image = GetImage(args);
image.Save(path); <-- Throws exception
}
Run Code Online (Sandbox Code Playgroud)
小智 1
处理图像不会影响内存流,如以下示例所示:
static void Main(string[] args) {
byte[] contents = File.ReadAllBytes(DESKTOP_PATH + "asample.tif");
MemoryStream ms = new MemoryStream(contents);
Image img = Image.FromStream(ms);
img.Dispose();
Image img2 = Image.FromStream(ms);
Console.WriteLine(img2.PixelFormat);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
这将输出“Format32bppPargb”。我建议将其包装到 using 语句中,如下所示:
using (MemoryStream ms = new MemoryStream(contents){
// code here
}
Run Code Online (Sandbox Code Playgroud)