ArgumentException发生:参数无效

ArgumentException发生:参数无效

问题描述:

我有这个代码片段(见下文),我正在与。我不断收到上述错误。任何人都可以告诉我我做错了什么以及如何解决它?谢谢。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; 
} 

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

+0

你有没有实际的异常文本?应该提供一个行号以便更快速的参考。编辑:错过了评论... nm –

+0

向我们提示错误的行 – confucius

+0

您确认缓冲区不是空的(并且包含有效的图像格式)吗? –

的ArgumentException

的你的情况的“0”偏移量和计数你的情况“总”大于缓冲区长度的总和。

看到this

尝试

byte [] buffer= new byte[total]; 

化妆while循环

+0

你是不是指while循环之前?当我把“byte [] buffer = new byte [total];”在while循环之后,我得到错误消息说“在声明之前不能使用局部变量”缓冲区“,这是准确的。但是,当我将它放在while循环之前时,我得到以下消息:ArgumentOutOfRange异常:指定的参数不存在 参数名称:此代码行的大小:while((read = stream.Read(buffer,total,1000))!= 0) – ck22

后,这种说法根据MSDN构造

public MemoryStream(byte[] buffer, int index, int count) 

抛出ArgumentException当指数和数量的总和更伟大 比缓冲区的长度。验证total变量是否包含小于buffer的正确值。

+0

也会试试这个,我会让你知道如果有效的话,谢谢 – ck22

+0

目前,“total”输出什么都没有,所以我正在通过while循环来看看我是否错过了一些东西。 – ck22

当人们试图获取IP摄像机的当前图像时,会看到很多此错误。原因是许多IP摄像机在URL上呈现他们自己的网页,并且您将网页视为图像,这将永远不会工作。

大多数IP摄像机都有一个URL来提供当前图像,您应该使用它。如果你不知道它是什么,这里有一个出发点:

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