首页 > 解决方案 > 使用 image.FromStream 方法从 byte[] 转换为 image

问题描述

我尝试将已经在 byte[] 中的数据库中的图像数据转换回图像,并且使用 Image.FileStream 得到“无效参数错误”。拜托,谁能帮我解决这个问题?

我尝试使用各种方法解决代码,最后一个在我的代码下方。

byte[] data = validaccount.FingerPrint;

try
{
    using (MemoryStream strm = new MemoryStream())
    {
        strm.Write(data, 0, data.Length);
        strm.Position = 0;
        System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
        BitmapImage bi = new BitmapImage();

        bi.BeginInit();

        MemoryStream ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

        ms.Seek(0, SeekOrigin.Begin);
        bi.StreamSource = ms;
        bi.EndInit();
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

该代码应该将其转换byte[]为图像。

标签: c#

解决方案


根据文档,如果“流没有有效的图像格式”, Image.FromStream(stream) 将引发参数异常。您是否验证了数据实际上是正确的?如果是这样,它是什么类型的图像?

你在滥用你的信息流。您只需要 1 个内存流,它有一个接受字节数组的构造函数(无需自己编写字节)。确保将其包装在 using 块中(就像您为第一个流所做的那样)。

您可能不想使用 BitmapImage - 这适用于 xaml/wpf 应用程序。您可能想要继承/扩展 System.Drawing.Image 的 System.Drawing.Bitmap。此外,Bitmap 有一个构造函数,它接受一个流 - 不需要使用 FromStream。

最后,Image(以及 Bitmap,因为 Bitmap 继承了 Image)实现了 IDisposable,因此您还应该将它包装在 using 块中。

PS 这是一个重复的问题


推荐阅读