0

我正在尝试将网络摄像头从客户端流式传输到服务器,但在从字节数组转换回服务器上的位图时遇到了困难。

这是代码:

public void handlerThread()
{
    Socket handlerSocket = (Socket)alSockets[alSockets.Count-1];
    NetworkStream networkStream = new
    NetworkStream(handlerSocket);
    int thisRead=0;
    int blockSize=1024;
    Byte[] dataByte = new Byte[blockSize];
    lock(this)
    {
        // Only one process can access
        // the same file at any given time
        while(true)
        {
            thisRead=networkStream.Read(dataByte,0,blockSize);

            pictureBox1.Image = byteArrayToImage(dataByte);
            if (thisRead==0) break;
        }
        fileStream.Close();
    }
    lbConnections.Items.Add("File Written");
    handlerSocket = null;
}

public Image byteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);  //here is my error
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}

在上面标记的地方,当我尝试转换回图像并崩溃时,我得到“参数无效”。关于我做错了什么的任何建议?

4

1 回答 1

0

注意这一点: Image.Save(..) 抛出 GDI+ 异常,因为内存流已关闭

您可以创建扩展方法或删除传统方法的“this”。这看起来与您的代码相同,所以我想知道您是否有某种类型的编码或其他与创建底层字节数组相关的问题?

public static Image ToImage(this byte[] bytes)
{
    // You must keep the stream open for the lifetime of the Image.
    // Image disposal does clean up the stream.

    var stream = new MemoryStream(bytes);
    return Image.FromStream(stream);
}
于 2012-12-04T05:33:49.600 回答