8

画像を受け取ってビットマップ画像に変換するコードを作成しましたが、うまくいきません。

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

public void ReceiveImage()
{
    NetworkStream stream = new NetworkStream(socket);
    byte[] data = new byte[4];
    stream.read(data,0,data.length,0)
    int size = BitConverter.ToInt32(data,0);
    data = new byte[size];
    stream.read(data,0,data.length)
    MemoryStream imagestream = new MemoryStream(data);
    Bitmap bmp = new Bitmap(imagestream);
    picturebox1.Image = bmp;
}

次のようになります。

Bitmap bmp = new Bitmap(imagestream);

そして、私にこのエラーを与えます:

パラメータが無効です

4

4 に答える 4

9

これは別の方法です

int w= 100;
int h = 200;
int ch = 3; //number of channels (ie. assuming 24 bit RGB in this case)

byte[] imageData    = new byte[w*h*ch]; //you image data here
Bitmap bitmap       = new Bitmap(w,h,PixelFormat.Format24bppRgb);
BitmapData bmData   = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
IntPtr pNative      = bmData.Scan0;
Marshal.Copy(imageData,0,pNative,w*h*ch);
bitmap.UnlockBits(bmData);
于 2013-04-30T12:55:52.747 に答える
1

はバイトを読み取ることを保証しないため、おそらく十分なバイトを受信しstream.read(data,0,data.length)て​​いません。戻り値を確認し、バイトが読み取られるまで読み取りを続ける必要があります。Readdata.lengthdata.Length

参照 : Stream.Read メソッドの戻り値

int read = 0;
while (read != data.Length)
{
    read += stream.Read(data, read, data.Length - read);
}

PS: lengths とreads はタイプミスだと思います。

于 2012-07-30T22:21:27.947 に答える
0

テーブルがあり、データベースから画像を受け取りたいと思います。

int cout = ds.Tables["TableName"].Rows.Count;
                if (cout > 0)
                {
                    if (ds.Tables["TableName"].Rows[cout - 1]["Image"] != DBNull.Value)
                    {
                        var data = (byte[])(ds.Tables["TableName"].Rows[cout - 1]["Image"]);
                        var stream = new MemoryStream(data);
                        pictureBox1.Image = Image.FromStream(stream);
                    }
                    else
                    {
                        pictureBox1.Image = null;
                    }
                }
于 2012-07-30T22:20:59.230 に答える
-1

これを試して:

int size = BitConverter.ToInt32(data.Reverse().ToArray(),0); 
于 2012-07-30T22:20:46.233 に答える