C# 如何从二维字节数组创建图像?
在我的项目中,经过漫长的过程,我从红外摄像机中获得了一个二维字节数组 字节数组在其中保存图像 如何将该字节数组转换为C#中的图像 我知道这一点C# 如何从二维字节数组创建图像?,c#,C#,在我的项目中,经过漫长的过程,我从红外摄像机中获得了一个二维字节数组 字节数组在其中保存图像 如何将该字节数组转换为C#中的图像 我知道这一点 MemoryStream ms = new MemoryStream(byteArray); System.drawing.Image im = Image.FromStream(ms); 我们可以传递一维数组并将其转换为图像 如果我将二维数组作为一维数组传递。。它显示了错误 如何纠正它。。????或者如何将二维字节数组转换为图像 谢谢 如果希望按顺序
MemoryStream ms = new MemoryStream(byteArray);
System.drawing.Image im = Image.FromStream(ms);
我们可以传递一维数组并将其转换为图像
如果我将二维数组作为一维数组传递。。它显示了错误
如何纠正它。。????或者如何将二维字节数组转换为图像
谢谢 如果希望按顺序处理字节数组,可以执行以下操作
byte[][] doubleArray = GetMyByteArray();
byte[] singleArray = doubleArray.SelectMany(x => x).ToArray();
MemoryStream ms = new MemoryStream(singleArray);
System.drawing.Image im = Image.FromStream(ms);
SelectMany方法基本上接受数组的数组并按顺序返回元素。从第一个数组的第一个元素开始,完成该数组,然后移动到下一个。这将继续,直到处理完所有元素 如果它是一个矩形数组(即
字节[,]
),而不是锯齿状数组(字节[]][]
),那么您可能只需要使用一些不安全的代码就可以完成
看看我的-只有最下面的一位是有趣的,它从调色板和数据块构造位图:
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[]data=query.ToArray();
不安全的
{
固定(字节*ptr=数据)
{
IntPtr scan0=新的IntPtr(ptr);
位图位图=新位图(ImageWidth、ImageHeight、//图像大小
ImageWidth,//扫描大小
PixelFormat.Format8Bppined,扫描0);
调色板=位图。调色板;
palete.Entries[0]=Color.Black;
对于(int i=1;i<256;i++)
{
palete.Entries[i]=Color.FromArgb((i*7)%256,(i*7)%256255);
}
调色板=调色板;
//东西
}
}
我不知道在构建位图后是否可以取消绑定数组-如果我将此用于生产代码,我会更仔细地查看它。Jon Skeet被击败了,还是JaredPar的答案有问题(如果询问者没有,则需要LINQ除外)?我不一定相信Jared的解决方案会奏效-我会在一分钟后的评论中解释原因。这还取决于OP是有一个字节[]还是一个字节[],我现在明白了,如果有人好奇为什么字节[],对JaredPar的答案不起作用。这不是假设流是某种公认的图像格式,例如png、jpg、gif吗?如果红外摄像机提供的是2D字节数组,我怀疑这是原始数据——这就是我提出解决方案的原因。我并不是说这行不通,但这取决于相机提供的格式。@Jon,完全同意。这取决于相机实际返回的内容。如果它是一个多维数组,您可以直接对其进行强制转换,因为您知道它的类型。这个方法在速度和内存使用方面都非常糟糕。