从图像和数据库中检索二进制文件,并使用WPF保存到文件夹中

本文关键字:WPF 保存 文件夹 图像 数据库 检索 二进制文件 | 更新日期: 2023-09-27 17:50:45

我已经成功地将图像转换为二进制并使用linq to sql WPF将其保存到数据库中,现在我想将其检索回图像格式并将其保存到计算机中的特定文件夹。

我读过很多博客和文章,从数据库中检索图像二进制,然后显示到PictureBox,我想做的是选择图像并使用linq to sql将其保存到特定的文件夹。

代码,我已经尝试到目前为止上传的图像:

private void Browse_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.DefaultExt = ".jpg";
            ofd.Filter = "Image File (.jpg) | *.jpg";
            Nullable<bool> result = ofd.ShowDialog();
            if(result == true)
            {
                string fileName = ofd.FileName;
                _txtFileName.Text = fileName;
            }
        }
        private void Upload_Click(object sender, RoutedEventArgs e)
        {
            using(ImageDataContext db=new ImageDataContext())
            {
                image_data img = new image_data();
                img.image = ConverImageToBinary(_txtFileName.Text);
                try
                {
                    db.image_datas.InsertOnSubmit(img);
                    db.SubmitChanges();
                    MessageBox.Show("Picture Upload Successfully", "Success", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        public static byte[] ConverImageToBinary(string convertedImage)
        {
            try
            {
                FileStream fs = new FileStream(convertedImage, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] image = br.ReadBytes((int)fs.Length);
                br.Close();
                fs.Close();
                return image;
            }
            catch(Exception ex)
            {
                throw ex;//MessageBox.Show(ex.Message, "error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
        }

从图像和数据库中检索二进制文件,并使用WPF保存到文件夹中

首先你的代码读取图像的方式是复杂的,你打开它作为一个流和读取好,所有字节。有一个方法可以做到这一点你可以把整个ConverImageToBinary方法替换成

img.image = File.ReadAllBytes(_txtFileName.Text);

你也从来没有"转换"任何东西到任何东西,一个图像只是一个字节数组在磁盘上,你已经读了它,保存到数据库,如果你读回来并保存它(使用这次File.WriteAllBytes)它会工作得很好,所以

如果您想写入磁盘,那么只需将映像保存回磁盘,如下所示:

File.WriteAllBytes(@"d:'myfile.bmp",img.Image.ToArray()) ;

并确保您更改扩展名,以匹配您的文件类型(所以bmp为位图jpg为jpeg等)