2011-09-08 101 views
1

我有這個代碼片段(見下文),我正在與。我不斷收到上述錯誤。任何人都可以告訴我我做錯了什麼以及如何解決它?謝謝。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

您確認緩衝區不是空的(並且包含有效的圖像格式)嗎? –

回答

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

2

後,這種說法根據MSDN構造

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

拋出ArgumentException當指數和數量的總和更偉大 比緩衝區的長度。驗證total變量是否包含小於buffer的正確值。

+0

也會試試這個,我會讓你知道如果有效的話,謝謝 – ck22

+0

目前,「total」輸出什麼都沒有,所以我正在通過while循環來看看我是否錯過了一些東西。 – ck22