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