C# 字节数组到图像异常,参数无效

C# 字节数组到图像异常,参数无效,c#,image,C#,Image,我很难通过常用方法将字节数组转换为图像,例如: using (var ms = new MemoryStream(byteArrayIn)) { return Image.FromStream(ms); ->exception } 及 异常是 参数无效 此外,我使用了由零值启动的4字节数组长度 它本来应该显示一个黑色的图像,但它没有 我使用了由零值启动的4字节数组长度 API需要一个有效的图像流;值为零的4字节不是有效的图像流。该方法将检查流,试图识别图像格式(流与文件大致相似,

我很难通过常用方法将字节数组转换为图像,例如:

using (var ms = new MemoryStream(byteArrayIn))
{
    return Image.FromStream(ms); ->exception
}

异常是 参数无效

此外,我使用了由零值启动的4字节数组长度

它本来应该显示一个黑色的图像,但它没有

我使用了由零值启动的4字节数组长度

API需要一个有效的图像流;值为零的4字节不是有效的图像流。该方法将检查流,试图识别图像格式(流与文件大致相似,除非没有任何文件名的概念)——它不仅仅是寻找像素数据。这意味着它将寻找一个可以识别的图像头(例如,png总是以字节值137 80 78 71 13 10 26 10开始);一旦确定了格式,它将需要解码图像标题(尺寸、颜色深度、可能的调色板等),然后最后可能会有一些像素数据——或者可能没有,如果不是像素格式(可能是矢量图像格式)。所以除了一些像素数据,还有很多要考虑的问题。

如果您想要黑色图像:可以从
Bitmap
开始-请参阅

我使用了由零值启动的4字节数组长度

API需要一个有效的图像流;值为零的4字节不是有效的图像流。该方法将检查流,试图识别图像格式(流与文件大致相似,除非没有任何文件名的概念)——它不仅仅是寻找像素数据。这意味着它将寻找一个可以识别的图像头(例如,png总是以字节值137 80 78 71 13 10 26 10开始);一旦确定了格式,它将需要解码图像标题(尺寸、颜色深度、可能的调色板等),然后最后可能会有一些像素数据——或者可能没有,如果不是像素格式(可能是矢量图像格式)。所以除了一些像素数据,还有很多要考虑的问题。


如果你想要一个黑色图像:也许从位图开始,也许可以看到你认为你可以用4个字节来制作一个图像?这就足够一个像素的数据了。但实际上并不是要使用哪种颜色的深度,也不是其他上千种重要信息中的任何一种。您不应该尝试从头开始创建图像。从现有soruce创建它,直到掌握了基本知识。显示
byteArrayIn
变量。如果您只想创建一个空的黑色图像,是什么阻止您使用新位图?此外,你的信息是从哪里来的,它应该是一个黑色的图像?您如何决定图片的宽度和高度?@Christopher为什么字节[]大小没有任何限制?@Mr.AF这并不意味着任何任意内容都是有效的;您试图表示什么格式(流与文件具有广泛的可比性:它不仅仅是原始位图数据);大多数图像格式的标题大于4bytes@Mr.AF这不仅仅是大小的问题:内容很重要;输入必须是有效的图像格式-
0
不是有效的图像格式。大多数图像包含一个标识标记(例如png总是从137 80 78 71 13 10 26 10开始),然后是特定格式的编码元数据-维度、颜色深度、可能的调色板、可能的日期/位置/工具元数据;最后是一些像素数据,可以使用一系列编码。。。假设它是基于像素的(相对于基于向量的),你认为你可以用4个字节制作一个图像吗?这就足够一个像素的数据了。但实际上并不是要使用哪种颜色的深度,也不是其他上千种重要信息中的任何一种。您不应该尝试从头开始创建图像。从现有soruce创建它,直到掌握了基本知识。显示
byteArrayIn
变量。如果您只想创建一个空的黑色图像,是什么阻止您使用新位图?此外,你的信息是从哪里来的,它应该是一个黑色的图像?您如何决定图片的宽度和高度?@Christopher为什么字节[]大小没有任何限制?@Mr.AF这并不意味着任何任意内容都是有效的;您试图表示什么格式(流与文件具有广泛的可比性:它不仅仅是原始位图数据);大多数图像格式的标题大于4bytes@Mr.AF这不仅仅是大小的问题:内容很重要;输入必须是有效的图像格式-
0
不是有效的图像格式。大多数图像包含一个标识标记(例如png总是从137 80 78 71 13 10 26 10开始),然后是特定格式的编码元数据-维度、颜色深度、可能的调色板、可能的日期/位置/工具元数据;最后是一些像素数据,可以使用一系列编码。。。假设它是基于像素的(相对于基于向量的)
System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
Image img = (Image)converter.ConvertFrom(ImgInBytes); -> exception