字节到图像转换错误

时间:2010-11-10 07:09:07

标签: c# image stream byte

正在访问客户端服务器应用程序 并且客户端将向服务器询问某个图像,然后服务器将其发送到客户端

当客户收到它时,它会将其显示在图片框中

所以这是我的代码

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 个答案:

答案 0 :(得分:2)

很难相信图像的大小不到1KB。有更大的缓冲区:

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

缓冲区小于图像的实际大小可能会导致数据不完整,这确实是图像的无效流。

答案 1 :(得分:0)

写入后,您需要将内存流的位置重置为开头:

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

答案 2 :(得分:0)

尝试此链接中提供的解决方案:http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=799

答案 3 :(得分:0)

您的网络代码有两种错误:

1)如果数据大于1024字节,则根本不起作用 2)如果传入的数据被分段,则它是中断(一个发送呼叫不映射到一个接收呼叫)。 TCP是一种不基于数据包的流协议。

要修复它,首先要写入图像的字节大小,并在读取读数时直到你有足够的字节,然后才从字节构造图像。