我使用以下代码从IP摄像机捕获图像:

HttpWebRequest reqs = (HttpWebRequest)WebRequest.Create("http://" + ip + snapshotCommand);
reqs.Method = "POST";
reqs.Timeout = 4000;
reqs.Credentials = new NetworkCredential(user, pass);
reqs.PreAuthenticate = true;

HttpWebResponse resp = (HttpWebResponse)reqs.GetResponse();
if (resp != null)
{
    Stream stm = resp.GetResponseStream();
    img = new Bitmap(stm);
    stm.Close();
}


但是stream抛出异常,因为CanSeekCanWrite为false。
我尝试了许多方法,例如Copyto(MemoryStream),但是问题仍然存在。
你能帮我吗?

这是使用MemoryStream的代码:

Stream stm = resp.GetResponseStream();
MemoryStream ms = new MemoryStream();
stm.CopyTo(ms);
ms.Position = 0;


ReadTimeoutWriteTimeout的“ ms”则为:
消息“此流不支持超时”。
因为canTimeout()对于MemoryStream也是假的。

最终,我找到了这个解决方案,并且效果很好:
https://stackoverflow.com/a/2368505/492628

最佳答案

如果无法找到该流,则应该能够将其复制到内存流中

以下a post可能会有所帮助。

关于c# - 为什么当Stream.CanSeek为false时我应该怎么做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43263004/

10-10 11:55