C# 位图图像的字节数组

C# 位图图像的字节数组,c#,arrays,bitmap,byte,C#,Arrays,Bitmap,Byte,我编写了这段代码来接收图像并将其转换为位图图像,但它不起作用 代码如下: 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 b

我编写了这段代码来接收图像并将其转换为位图图像,但它不起作用

代码如下:

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);
给了我这个错误:

参数无效

试试这个:

int size = BitConverter.ToInt32(data.Reverse().ToArray(),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;
                    }
                }

您可能在
stream.read(data,0,data.length)
中没有收到足够的字节,因为
read
不能确保它将读取
data.length
字节。您必须检查其返回值并继续读取,直到读取
数据。长度
字节

请参阅:'s返回值

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

注:我假设
长度
s和
读取
s是打字错误。

这是另一种方法

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);

@塔瑞克……这是C代码吗?当我把它复制到VisualStudio中时,它有一些打字错误;使用System.Net.Sockets;Net系统;并使用系统、绘图、成像;可能没有向您发送有效的图像数据?当参数不是有效图像时,会给出参数“无效”。我认为你阅读文件的方式有问题,你的假设可能是错误的。查看代码
NetworkStream
试试看这只不过是一个注释<代码>试试这个。这应该可以工作,因为…
是一个答案。发生此错误的原因是“无法从传输连接读取数据”。由于系统缺少足够的缓冲区空间或队列已满,可能会在套接字上执行操作。'请检查
大小
。它可以在里面。您可以尝试
IPAddress.NetworkToHostOrder(BitConverter.ToInt32(数据,0))
不工作,转到“数据=新字节[大小];”然后告诉我这个错误“算术运算导致溢出”@TarekAdel你的问题中显示的信息如此之少,你希望我做什么?好吧,我在你的代码中发现了一个明显的bug,但我不是一个魔术师。在连接的另一端,您有什么类型的服务器/客户端?它以哪种协议发送图像?我不能发送代码给你,因为它超过800个字符,我如何发送给你?如果通过Facebook,这是我的电子邮件tarek55544@live.com