Произошло ArgumentException: параметр недействителен - PullRequest
1 голос
/ 08 сентября 2011

У меня есть этот фрагмент кода (см. Ниже), с которым я работаю. Я продолжаю получать вышеуказанную ошибку. Может кто-нибудь сказать мне, что я делаю не так и как это решить? Спасибо.

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 ]

2 голосов
/ 08 сентября 2011

Согласно MSDN Конструктор

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

выдает ArgumentException, когда сумма индекса и числа превышает длину буфера. Убедитесь, что переменная total содержит правильное значение, которое меньше buffer.

0 голосов
/ 30 апреля 2014

Эту ошибку часто видят люди, пытающиеся получить текущее изображение с IP-камеры.Причина заключается в том, что многие IP-камеры отображают свои собственные веб-страницы по URL-адресу, и вы рассматриваете веб-страницу как изображение, которое никогда не будет работать.

У большинства IP-камер есть URL-адрес, который дает текущее изображение, вы должны использовать это вместо этого.Если вы не знаете, что это, вот отправная точка:

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

0 голосов
/ 08 сентября 2011

ArgumentException

Сумма смещения в вашем случае "0" и количества в вашем случае "общего" больше, чем длина буфера.

см. это

попробуй

byte [] buffer= new byte[total]; 

сделать это утверждение после цикла while

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...