web-dev-qa-db-ja.com

Entity Framework 6を​​使用してSQL Serverから画像(バイナリ)を保存および取得する

ビットマップ画像をデータベースに保存しようとしています

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[]));
33
Ehsan Akbar

イメージを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[]が大きくなると動作しなくなります。 100Mb未満のファイルで機能します

74
JensB