将二进制转换回图像

时间:2018-12-12 09:05:49

标签: c# linq wcf

我有一个wcf服务和Windows窗体。我能够将图像转换为二进制文件并将其以varbinary(MAX)数据类型存储到SQL服务器中的EmpTable中。我使用linq和实体数据模型访问表。现在,我尝试在表单上的DataGridView上显示EmpTable,我注意到它在列上显示“ System.byte []”。因此,当我尝试将其转换回图像时,它失败了。现在,我不知道如何获取数据并将其转换回图像。我所有的linq命令都在我的服务中,我正在Winforms中使用它。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以使用MemorySrteambyte[]转换为图像:

var bytes = getBytes();     // get bytes from db
Image img;
using (MemoryStream ms = new MemoryStream(bytes))
{
    img = Image.FromStream(ms);
}

要将图像保存到DataGrid,请将图像列设置为DataGridViewImageColumn

DataGridViewImageColumn imgGrd = new DataGridViewImageColumn();
imgGrd.Image = img;

答案 1 :(得分:0)

此处是将byte[]转换为BitmapImage的函数。

    /// <summary>
    /// Convert byte[] to bitmapimage
    /// </summary>
    /// <param name="array"></param>
    /// <returns></returns>
    public static BitmapImage byteArrayToImage(byte[] array)
    {
        if (array != null)
        {
            using (var ms = new MemoryStream(array))
            {
                var image = new BitmapImage();
                image.BeginInit();
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.StreamSource = ms;
                image.EndInit();
                return image;
            }
        }
        return null;
    }