如何从二维字节数组创建图像?
经过漫长的过程,在我的项目中,我从红外摄像机获得了一个二维字节数组。
字节数组中包含图像…
如何将该字节数组转换为C#中的图像
我知道
MemoryStream ms = new MemoryStream(byteArray); System.drawing.Image im = Image.FromStream(ms);
我们可以传递1维数组并将其转换为图像..
如果我将2维数组作为单维数组传递..它显示错误..
如何纠正它.. ???? 或者如何将2维字节数组转换为图像… ???
谢谢!!
如果它是一个矩形数组(即一个byte[,]
)而不是一个锯齿状数组( byte[][]
),那么你可以用一些不安全的代码完成它。
看看我的并行Mandelbrot集生成代码 – 只有底部位是有趣的,它从一个调色板和一个数据块构造一个Bitmap:
byte[] data = query.ToArray(); unsafe { fixed (byte* ptr = data) { IntPtr scan0 = new IntPtr(ptr); Bitmap bitmap = new Bitmap(ImageWidth, ImageHeight, // Image size ImageWidth, // Scan size PixelFormat.Format8bppIndexed, scan0); ColorPalette palette = bitmap.Palette; palette.Entries[0] = Color.Black; for (int i=1; i < 256; i++) { palette.Entries[i] = Color.FromArgb((i*7)%256, (i*7)%256, 255); } bitmap.Palette = palette; // Stuff } }
我不知道你是否可以在构造位图后取消固定数组 - 如果我将它用于生产代码,我会更仔细地研究它。
如果要按顺序处理字节数组,可以执行以下操作
byte[][] doubleArray = GetMyByteArray(); byte[] singleArray = doubleArray.SelectMany(x => x).ToArray(); MemoryStream ms = new MemoryStream(singleArray); System.drawing.Image im = Image.FromStream(ms);
SelectMany方法基本上采用数组数组并按顺序返回元素。 从第一个数组的第一个元素开始,完成该数组然后移动到下一个数组。 这将继续,直到处理完所有元素。
- ASP.NET MVC + WF + WCF + SERVICE LAYER如何在一个项目中使用它们?
- C#32feet.Net:在单独的线程中处理两个蓝牙连接,给出SocketException
- ASP.net c#替换字符串不起作用
- VisualStudio C#x64,为什么AddReference选项,.NET选项卡指向x86 DLL而不是x64?
- 用于URLvalidation的正则表达式
- 在.NET Core中的IServiceCollection中不可用的UseNpgsql
- 这种使用generics的模式有名称吗?
- 返回ICollection优于List 的优点是什么
- 如何从live.com获取OAuth request_token?