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

时间:2015-05-25 16:59:29

标签: c# sql-server wpf image linq

我已成功将图像转换为二进制文件并使用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);
            }
        }

1 个答案:

答案 0 :(得分:2)

要读取图像的第一个代码是复杂的,你将它作为一个流打开并读取所有字节。有一种方法正是如此,所以你可以用

替换你的整个ConverImageToBinary方法
img.image = File.ReadAllBytes(_txtFileName.Text);

此外,你从来没有&#34;转换&#34;任何东西,图像只是磁盘上的一个字节数组,你已经读过它,保存到数据库,如果你把它读回来并保存回来(使用这个时间File.WriteAllBytes)它只会工作很好,所以

如果要写入磁盘,则只需将映像保存回磁盘:

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

并确保更改扩展名以匹配您的文件类型(因此对于jpeg等位图jpg来说是bmp)