将字节转换为图像jpg

时间:2018-12-06 06:53:42

标签: c# image drawing memorystream

我将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中无效(流流,布尔值useEmbeddedColorManagement,布尔值validateImageData)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

解决方案 * :删除以下行: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);

如Jimi所言,将其包装成一个方法可能更好:

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()的原因是,如果原始流已被丢弃,则保存图像可能会遇到麻烦。