我在将byte[]转换为.jpg文件时遇到问题。当我尝试转换字节时,我在这个方法中得到了一个异常:
using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length))
{
ms.Write(bytes, 0, bytes.Length);
Image image = Image.FromStream(ms, true, false);
}
例外:
System.Drawing.Image.FromStream(流流,布尔使用EmbeddedColorManagement,布尔验证ImageData(中的参数无效
有什么建议吗?
解决方案*:删除行:ms.Write(bytes, 0, bytes.Length);
*如果不起作用,则bytes
数组不包含有效的图像数据
原因:
这一行用字节数组中的字节初始化MemoryStream
。它将在位置0(开始(开始流:
using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length))
在您的情况下,它可以简化为:
using (MemoryStream ms = new MemoryStream(bytes))
然后,这一行将相同的字节写入流中。它将把你的流留在位置bytes.Length
(结束(:
ms.Write(bytes, 0, bytes.Length);
这一行将尝试从当前位置(末尾(开始的流中读取图像。由于0字节不构成图像,因此它会失败,给您一个例外:
Image image = Image.FromStream(ms, true, false);
正如吉米所指出的,最好将其包装成一种方法:
public static Image ImageFromByteArray(byte[] bytes)
{
using (MemoryStream ms = new MemoryStream(bytes))
using (Image image = Image.FromStream(ms, true, true))
{
return (Image)image.Clone();
}
}
使用Clone()
的原因是,如果原始流已被丢弃,则可能会导致保存图像的困难。