我用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);这句话“参数无效”,请问各位大神应该怎么解决啊?
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上面
转自:http://zhidao.baidu.com/link?url=LNDGTpC7CdagtfU7u1OdE_9MxBIWBXdG_AodVvakdOvXe1Y7B-_EnXgVTIVAQ7lA8KPwupCKRmNakOjyRvhHga
static GCHandle handle;
static int scan;
static Bitmap pBuffer = null;
handle = GCHandle.Alloc(rgbArray, GCHandleType.Pinned)
scan = (int)handle.AddrOfPinnedObject();
scan += (height - 1) * stride;
pBuffer = new Bitmap(width, height, -stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, (IntPtr)scan);
PictureBox.Image = pBuffer;
handle.Free();
转自:http://tieba.baidu.com/p/2123187152