C# Image.Save() 导致保存 JPG 文件时无法访问已关闭的流(PNG 有效)

C# Image.Save() cause Cannot access a closed Stream when saving JPG file (PNG works)

我的行为很奇怪。

我有一个代码,当我将 byte[] 数组发送到图像(有时是 png,有时是 jpg)时。

当我保存 PNG 格式时 - 一切正常,但当我尝试保存 JPG 时,出现异常:“无法访问已关闭的流”

代码:

imgTarget.Save(wwwroot + "\ImageBank\" + TaskRunID + "_" + TestCaseID + "_" + TestDataID + "_" + ImageCounter + Extension, ImageFormat.Jpeg);

我检查过的内容:

奇怪的是 imgTarget 在调用方法 Save() 之前包含数据 - 但紧随其后 null/disposed...

有人有什么想法吗?

编辑:

我准备了一些以同样方式失败的代码 - 它在最后一行失败 .Save()

// This contains only the URL for the downloading of the file
string url = $"***url to download jpg file***";

// Request for the API - which downloads the jpg file via GET and provide the RawData via Response.RawBytes
APIRequest request = new APIRequest(RestSharp.Method.GET, url, new Authentication("user", "password", "-1"));

// Test case is only class which calls RestSharp (get png or jpg file)
TestCase t = new TestCase();
// This downloads the jpg file and store it as byte[] in t.GetDataFromAPI
t.API(request);
// Using downloaded data as byte[]
byte[] APIImageSource = t.GetDataFromAPI;
// Default extensions for saving files is .png
string Extension = ".png";
            

Image imgTarget;
// Now I use bytes[] and convert them into the image
imgTarget = ConvertBytesToImage(APIImageSource);
if (t.GetImageFormat(APIImageSource) == ExpectedFormat.JPEG)
{
     Extension = ".jpeg";
}
string path = "C:\Temp\filename" + Extension;
imgTarget.Save(path + Extension, ImageFormat.Jpeg);

有方法 ConvertBytesToImage:

internal static Image ConvertBytesToImage(byte[] bytes)
{
    using (var ms = new MemoryStream(bytes))
    {
        return Image.FromStream(ms);
    }
}

@Simon Mourier 的评论是解决方案:

删除 MemoryStream 上的使用,或删除 ConvertBytesToImage 并保持 MemoryStream 活动,直到您完全保存图像。 – Simon Mourier 1 分钟前

我不明白为什么,但我已经删除了 using 语句,现在可以使用了。

谢谢大家