请教一个C#中将byte[]数组转换为Image的问题 10
我用C#显示摄像头图像,摄像头是320X240,16位色,因此每一帧大小是153600字节,接收的数据存在g[]中,程序如下byte[]g=newbyte[153600]...
我用C#显示摄像头图像,摄像头是320X240,16位色,因此每一帧大小是153600字节,接收的数据存在g[]中,程序如下
byte[] g = new byte[153600];
for (int i = 0; i != g.Length; i++)
{
g[i] = Convert.ToByte(sp.ReadByte()) ;
}
下面的程序是我将byte[]转换为Image:
public Image ByteArrayToImage(byte[] b)
{
MemoryStream ms = new MemoryStream(b);
Image img = Image.FromStream(ms);
return img;
}
可是每次接收的时候,程序都会跳出,提示 Image img = Image.FromStream(ms);这句话“参数无效”,请问各位大神应该怎么解决啊? 展开
byte[] g = new byte[153600];
for (int i = 0; i != g.Length; i++)
{
g[i] = Convert.ToByte(sp.ReadByte()) ;
}
下面的程序是我将byte[]转换为Image:
public Image ByteArrayToImage(byte[] b)
{
MemoryStream ms = new MemoryStream(b);
Image img = Image.FromStream(ms);
return img;
}
可是每次接收的时候,程序都会跳出,提示 Image img = Image.FromStream(ms);这句话“参数无效”,请问各位大神应该怎么解决啊? 展开
4个回答
展开全部
Image是一个抽象类,不能直接作为实例化使用。
FromStream输入的内容必须是图片文件jpg,bmp的数据,而不是rgb数据
应该用Image的子类Bitmap,
byte[] rgb = new byte[153600];//原RGB字节数据
Bitmap img = new Bitmap(320, 240, PixelFormat.Format24bppRgb);
//锁定内存数据
BitmapData data=img.LockBits(
new Rectangle(0,0,img.Width,img.Height),
ImageLockMode.WriteOnly,
PixelFormat.Format24bppRgb);
//输入颜色数据
System.Runtime.InteropServices.Marshal.Copy(rgb, 0, data.Scan0, rgb.Length);
img.UnlockBits(data);//解锁
g.DrawImage(img);//绘制在Graphics上面
FromStream输入的内容必须是图片文件jpg,bmp的数据,而不是rgb数据
应该用Image的子类Bitmap,
byte[] rgb = new byte[153600];//原RGB字节数据
Bitmap img = new Bitmap(320, 240, PixelFormat.Format24bppRgb);
//锁定内存数据
BitmapData data=img.LockBits(
new Rectangle(0,0,img.Width,img.Height),
ImageLockMode.WriteOnly,
PixelFormat.Format24bppRgb);
//输入颜色数据
System.Runtime.InteropServices.Marshal.Copy(rgb, 0, data.Scan0, rgb.Length);
img.UnlockBits(data);//解锁
g.DrawImage(img);//绘制在Graphics上面
展开全部
和我遇到的问题一样。转码问题。
public static string ToStringNow(object obj)
{
StringBuilder sb = new StringBuilder();
byte[] byte1 = (byte[])obj;
for (int i = 0; i < byte1.Length; i++)
{
char p;
p = (char)byte1[i];
sb.Append(p);
}
return sb.ToString();
}
这个是转码的方法
string path = ToStringNow(this.dataGridView1[2, i].Value);
this.dataGridView1[2, i].Value = Image.FromFile(path);
在dataGridView中第三列显示。
public static string ToStringNow(object obj)
{
StringBuilder sb = new StringBuilder();
byte[] byte1 = (byte[])obj;
for (int i = 0; i < byte1.Length; i++)
{
char p;
p = (char)byte1[i];
sb.Append(p);
}
return sb.ToString();
}
这个是转码的方法
string path = ToStringNow(this.dataGridView1[2, i].Value);
this.dataGridView1[2, i].Value = Image.FromFile(path);
在dataGridView中第三列显示。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MemoryStream ms = new MemoryStream(b);
Bitmap bm = new Bitmap(ms);
return bm
试一下这个呢。
Bitmap bm = new Bitmap(ms);
return bm
试一下这个呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public Image ByteArrayToImage(byte[] b)
{
MemoryStream ms = new MemoryStream(b);
System.Drawing.Bitmap image = new Bitmap(ms);
return image;
}
{
MemoryStream ms = new MemoryStream(b);
System.Drawing.Bitmap image = new Bitmap(ms);
return image;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询