我有这个与我合作的代码片段(见下文)。我一直收到上述错误。谁能告诉我我做错了什么以及如何解决它?感谢。
private static Image<Bgr, Byte> GetImageFromIPCam(string sourceURL)
{
byte[] buffer = new byte[300000];
int read, total = 0;
// create HTTP request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sourceURL);
// get response
WebResponse resp = req.GetResponse();
// get response stream
Stream stream = resp.GetResponseStream();
// read data from stream
while ((read = stream.Read(buffer, total, 1000)) != 0)
{
total += read;
}
// get bitmap
Bitmap bmp = (Bitmap)Bitmap.FromStream( //error occurs here
new MemoryStream(buffer, 0, total)); //error occurs here
Image<Bgr, Byte> img = new Image<Bgr, byte>(bmp);
return img;
}
我想补充一点,这个程序不时正常工作。有些日子它根本不起作用,我不明白为什么。我有一个演示文稿,我无法承受该程序在当天无法运行。
答案 0 :(得分:2)
根据MSDN构造函数
public MemoryStream(byte[] buffer, int index, int count)
当索引和计数的总和大于缓冲区的长度时,抛出ArgumentException
。验证total
变量是否包含小于buffer
的正确值。
答案 1 :(得分:0)
ArgumentException
在您的情况下“0”的偏移量和在您的情况下“总计”的计数大于缓冲区长度。
请参阅this
尝试
byte [] buffer= new byte[total];
在while循环后生成此语句
答案 2 :(得分:0)
人们试图获取IP摄像机的当前图像时会看到很多错误。原因是许多IP摄像机在URL处呈现自己的网页,并且您将网页视为图像,这将永远不会起作用。
大多数IP摄像机都有一个可以显示当前图像的URL,您应该使用它。如果您不知道它是什么,这是一个起点: