Подтвердить что ты не робот

Сохранение и извлечение изображения (двоичного) из SQL Server с использованием Entity Framework 6

Я пытаюсь сохранить растровое изображение в базе данных

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[]));
4b9b3361

Ответ 1

Преобразуйте образ в byte[] и сохраните его в базе данных.


Добавьте этот столбец в свою модель:

public byte[] Content { get; set; }

Затем преобразуйте изображение в массив байтов и сохраните его, как и любые другие данные:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    return ms.ToArray();
}

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

Источник: Самый быстрый способ преобразования изображения в байтовый массив

var image = new ImageEntity(){
   Content = imageToByteArray(image)
}
_Context.Images.Add(image);
_Context.SaveChanges();

Если вы хотите вернуть изображение, получите массив байтов из базы данных и используйте byteArrayToImage и сделайте то, что хотите, с помощью Image

Это перестает работать, когда byte[] становится большим. Он будет работать для файлов размером менее 100 МБ