发生ArgumentException:参数无效

时间:2011-09-08 14:53:43

标签: c# argumentexception

我有这个与我合作的代码片段(见下文)。我一直收到上述错误。谁能告诉我我做错了什么以及如何解决它?感谢。

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;
}

我想补充一点,这个程序不时正常工作。有些日子它根本不起作用,我不明白为什么。我有一个演示文稿,我无法承受该程序在当天无法运行。

3 个答案:

答案 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,您应该使用它。如果您不知道它是什么,这是一个起点:

http://www.bluecherrydvr.com/2012/01/technical-information-list-of-mjpeg-and-rtsp-paths-for-network-cameras/