ошибка преобразования байтов в изображения - PullRequest
0 голосов
/ 10 ноября 2010

создаю клиент-серверное приложение, и клиент запросит у сервера определенное изображение, а сервер отправит его клиенту

, когда клиент получит его, и покажет его в окне для картинок

так что это мой код

string line = null;
            line = textBox3.Text;
            socket.Send(Encoding.ASCII.GetBytes(line)); 
            data = new byte[1024];
            dataSize = socket.Receive(data);
            //string s = Encoding.ASCII.GetString(data, 0, dataSize);
            //           textBox4.Text = s;
            Image newImage;
            using (MemoryStream ms = new MemoryStream(data,0,dataSize)) 
            { 

                ms.Write(data,0,dataSize); 

                newImage = Image.FromStream(ms,true); //HERE I GOT THE PROBLEM

            }


            pictureBox1.Image = newImage;
        }

тогда он возвращает ошибку, вызванную, параметр недействителен, поэтому я не знаю, что здесь не так?

Ответы [ 4 ]

2 голосов
/ 10 ноября 2010

Трудно поверить, что размер изображения меньше 1 КБ. Иметь больший буфер:

 data = new byte[1024 * 500]; //limit to 500KB

Наличие буфера, меньшего, чем фактический размер изображения, вероятно, приводит к неполным данным, которые действительно являются недопустимым потоком для изображения.

0 голосов
/ 10 ноября 2010

Ваш сетевой код содержит две ошибки:

1) Если данные больше 1024 байт, они не будут работать вообще2) Если входящие данные становятся фрагментированными, они прерываются (один отправляющий вызов НЕ сопоставляется с одним получающим вызовом).TCP является потоком, а не протоколом на основе пакетов.

Чтобы исправить это, сначала запишите байтовый размер изображения, а при чтении считывайте, пока у вас не будет достаточно байтов, и только затем создайте изображение из байтов.

0 голосов
/ 10 ноября 2010

Попробуйте решение, приведенное по этой ссылке: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=799

0 голосов
/ 10 ноября 2010

Вам необходимо сбросить позицию потока памяти обратно в начало после записи в него:

...
ms.Write(data,0,dataSize); 
ms.Position = 0;
newImage = Image.FromStream(ms,true); //HERE I GOT THE PROBLEM
...
...