如何使用 dbContext WPF c# 在我的数据库 sqlite 中添加图像?

How can I add an image in my database sqlite using dbContext WPF c#?

我想以字节形式在图像列中将图像添加到数据库 我正在使用 SQLite 保存我的数据库数据和 WPF 应用程序使用 dbContext c# 编写我的代码

谁能帮帮我?

private void ChooseImageButtonClick(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

    dlg.Filter = "Choose Image(*.JPG;*.PNG;*.GIF)|*.jpg;*.png;*.gif";

    if (dlg.ShowDialog() == true)
    {
        string FileName = dlg.FileName.ToString();
        BitmapImage bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(FileName);
        bitmap.EndInit();
        ImageBox.Source = bitmap;
    }
}

private void savebtnClick(object sender, RoutedEventArgs e)
{
    using (DatabaseContext dbContext = new DatabaseContext())
    {
            Person p = new Person
            {
                Id = int.Parse(Idtextbox.Text),
                Name = Nametextbox.Text,
                Image = image
            };
        dbContext.Person.Add(p);
        dbContext.SaveChanges();
        RefreshList();
    }
}

先将BitmapImage转为字节数组即可

byte[] image;

JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = 100;

using (MemoryStream ms = new MemoryStream())
{
    encoder.Frames.Add(BitmapFrame.Create((BitmapSource)ImageBox.Source));
    encoder.Save(ms);
    image = ms.ToArray();
}
encoder = null;

并在您的数据库上下文中添加

using (DatabaseContext dbContext = new DatabaseContext())
        {
            Part part = new Part();
            part.Id = int.Parse(TextBoxID.Text);
            part.Name = TextBoxName.Text;
            part.Image = image;
            dbContext.Part.Add(part);
            dbContext.SaveChanges();
            RefreshPartsList();
        }}

将字节数组转换回 BitmapImage:

byte[] imageData = part.Image; // that you get from db
if (imageData == null || imageData.Length == 0) 
   {
   //Show error msg or return here;
   return;
   }

var image = new BitmapImage();

 using (var ms = new System.IO.MemoryStream(imageData))
{
    image.BeginInit();
    image.CacheOption = BitmapCacheOption.OnLoad; 
    image.StreamSource = ms;
    image.EndInit();
    image.Freeze();
}

在'Part'中添加属性class

public byte[] ImageCol { get; set; }

然后从 "OpenFileDialog" 从所选文件创建图像。例如

OpenFileDialog openFileDialog = new OpenFileDialog
        {
            Filter = "Image Files(*.BMP;*.JPG;*.JPEG;*.GIF;*.PNG)|*.BMP;*.JPG;*.JPEG;*.GIF;*.PNG",
            InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
        };
        if (openFileDialog.ShowDialog()==DialogResult.OK)
        {
            var imageFromFile = System.Drawing.Image.FromFile(openFileDialog.FileName);
            part.ImageCol = imageFromFile.ConvertBitmapImagetoBytes();
        }

将位图转换为字节[]

public static byte[] ConvertBitmapImagetoBytes(this Image image)
    {
        MemoryStream ms = new MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return ms.ToArray();
    }