无法从 WebResponse 流创建 System.Drawing.Image 对象

Unable to create System.Drawing.Image object from WebResponse Stream

我正在尝试从 WebResponse 的响应流创建一个 System.Drawing.Image 对象。这是我正在做的事情:

using (WebResponse response = await request.GetResponseAsync())
{
    using (Stream originalInputStream = response.GetResponseStream())
    {
         // some code that calls a 3rd party image resizer, passing in the original stream
         ResizeImage(originalInputStream, out resizedOutputStream);

         // manipulation of the resizedOutputStream

         // now i want to create an image from the ORIGINAL stream 
         // ERROR HAPPENS HERE!!
         using (Image image = Image.FromStream(originalInputStream))
         {
              // random code that doesn't get hit because of the error above
         }
    }
}

当程序试图在 using 语句中创建 Image.FromStream() 时,我收到一条错误消息:

'Parameter is not valid.'

我认为这是因为在调整器函数中对 originalInputStream 进行了操作。我四处寻找,发现重置流的位置可以解决这些问题。所以我尝试了,同时使用:

originalInputStream.Seek(0, SeekOrigin.Begin);
originalInputStream.Position = 0;

但是这两个都出错了,给我一条错误信息:

Specified method is not supported.

当我尝试创建 Image.FromStream() 时,没有对前面的图像进行任何 resizing/stream 操作...它有效。但是 THEN,之后我不能对流做任何其他事情,否则它会像以前一样出错。但是,我需要进行操作,还需要创建图像,所以我被卡住了。

最好的做法是简单地创建另一个请求吗?只是从新请求的响应流中创建图像?这似乎是一种不好的做法,我不知道,我觉得我正在做的事情理论上应该可行,而且我可能只是在做一些愚蠢的事情。

在此先感谢您的帮助,如果我可以提供任何额外信息,请告诉我。

重置流位置在流基础上不起作用class。如果您可以将响应读入 MemoryStream,那么您就可以随心所欲地处理图像。像这样的东西可以工作:

using (WebResponse response = await request.GetResponseAsync())
{
    using (Stream responseStream = response.GetResponseStream())
    {
        using (MemoryStream memStream = new MemoryStream()) 
        {
            responseStream.CopyTo(memStream);
            // some code that calls a 3rd party image resizer, passing in the original stream
            ResizeImage(memStream, out resizedOutputStream);
            memStream.Seek(0, SeekOrigin.Begin);

            // manipulation of the resizedOutputStream

            // now i want to create an image from the ORIGINAL stream 
            using (Image image = Image.FromStream(memStream))
            {

            }
        }
    }
}