将字节转换为图像jpg



我在将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()的原因是,如果原始流已被丢弃,则可能会导致保存图像的困难。

最新更新