0

クライアントからサーバーに Web カメラをストリーミングしようとしていますが、サーバー上のバイト配列からビットマップへの変換に問題があります。

コードは次のとおりです。

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 に答える