一尘不染

使用Entity Framework 6从SQL Server保存和检索图像(二进制)

c#

我正在尝试将位图图像保存到数据库

Bitmap map = new Bitmap(pictureBoxMetroMap.Size.Width, pictureBoxMetroMap.Size.Height);

imgcontent在数据库中创建了具有数据类型的列,binary但我的问题是如何将其bitmap(映射)转换为二进制数据?

以及如何从数据库检索数据?

我用谷歌搜索,发现了类似的东西,但是没有用:

byte[] arr;
ImageConverter converter = new ImageConverter();
arr = (byte[])converter.ConvertTo(map, typeof(byte[]));

阅读 244

收藏
2020-05-19

共1个答案

一尘不染

将图像转换为byte[]并将其存储在数据库中。


将此列添加到模型中:

public byte[] Content { get; set; }

然后将图像转换为字节数组,并像存储其他任何数据一样存储它:

public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
    using(var ms = new MemoryStream())
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

        return ms.ToArray();
    }
}

public Image ByteArrayToImage(byte[] byteArrayIn)
{
     using(var ms = new MemoryStream(byteArrayIn))
     {
         var returnImage = Image.FromStream(ms);

         return returnImage;
     }
}

来源:将图像转换为字节数组的最快方法

var image = new ImageEntity()
{
   Content = ImageToByteArray(image)
};

_context.Images.Add(image);
_context.SaveChanges();

如果你想获得的图像回来,从数据库中获取的字节数组,并使用ByteArrayToImage与你希望与什么样的Image

byte[]变大时,这将停止工作。适用于100Mb以下的文件

2020-05-19