无法从 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))
{
}
}
}
}
我正在尝试从 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))
{
}
}
}
}