wpf图片的预览,以流的方式将图片保存在数据库中,再以流的方式从数据库中读取显示图片...

本文介绍如何使用WPF进行图片预览、以流的形式保存图片到数据库及从数据库读取并显示图片的方法。涉及的技术包括使用BitmapImage进行图片加载、通过File.ReadAllBytes将图片转换为字节数组以便存储,以及如何从数据库读取字节数组并转换回图片。
WPF实现的图片保存显示有些不一样,有必要自我总结一下。。。
【注:数据库中保存图片的数据类型最好是varbiary(max)】
1.图片预览功能:
 
显示代码
 1  private void btn_preview_Click(object sender, RoutedEventArgs e)
 2         {
 3             OpenFileDialog openfiledialog = new OpenFileDialog();
 4             openfiledialog.Filter = "图片(*.jpg;*.png;*.gif;*.bmp;*.jpeg)|*.jpg;*.png;*.gif;*.bmp;*.jpeg";
 5             if ((bool)openfiledialog.ShowDialog())
 6             {
 7                 BitmapImage bitmapimg = new BitmapImage(new Uri(openfiledialog.FileName));
 8                 image1.Source = bitmapimg;
 9                 //image1.Width = bitmapimg.Width;
10                 //image1.Height = bitmapimg.Height;
11                 this.tb_selPic.Text = openfiledialog.FileName;
12             }
13         }

2.以流的方式将图片保存在数据库

 

显示代码
 1  private void btn_add_Click(object sender, RoutedEventArgs e)
 2         {
 3             if (!string.IsNullOrEmpty(this.tb_selPic.Text))
 4             {
 5                 byte[] img = File.ReadAllBytes(this.tb_selPic.Text);                         //将图片装换为字节,存储在数据库中
 6                 MyJobs myJobs = new MyJobs
 7                 {
 8                     Job_desc = this.tb_jobdesc.Text,
 9                     Pic = img,
10                 };
11                 List<SqlParameter> sqlPar = new List<SqlParameter>
12                 {
13                     new SqlParameter("@job_desc",myJobs.Job_desc),
14                     new SqlParameter("@pic",myJobs.Pic),
15                 };
16                 string msg = DBHelper.DBSQLHelper.Execute("proc_myjobs", sqlPar, System.Data.CommandType.StoredProcedure) > 0 ? "添加成功!":"添加失败!";
17                 MessageBox.Show(msg);               
18             }
19             else
20             {
21                 MessageBox.Show("请选择图片!");
22             }
23         }

 

3.从数据库中读取以流的方式显示
显示代码
 1  private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)         {             if ((e.OriginalSource as DataGrid).SelectedItem != null)             {                 int job_id = Convert.ToInt32(((e.OriginalSource as DataGrid).SelectedItem as DataRowView)[0].ToString());                 DataSet ds = DBHelper.DBSQLHelper.Search("select * from myjobs where job_id=" + job_id, null, CommandType.Text);                 this.tb_jobdesc.Text = ds.Tables[0].Rows[0]["job_desc"].ToString();                 byte[] img = (byte[])ds.Tables[0].Rows[0]["pic"];    //从数据库中获取图片数据转换为字节数组(注意:不用用这种方式转换为字节数组,这种转换有问题,我之前一直出不来效果 byte[] img = System.Text.ASCIIEncoding.ASCII.GetBytes(ds.Tables[0].Rows[0]["pic"].ToString()); 现在修改了,就能出来效果了,这个问题还挺让人纠结的呢,所以大家要注意哦!)                 ShowSelectedIMG(img);                //以流的方式显示图片的方法             }         }
 2 
 3         private void ShowSelectedIMG(byte[] img)         {             System.IO.MemoryStream ms = new System.IO.MemoryStream(img);//img是从数据库中读取出来的字节数组
 4 
 5             ms.Seek(0, System.IO.SeekOrigin.Begin);                          BitmapImage newBitmapImage = new BitmapImage();
 6 
 7             newBitmapImage.BeginInit();
 8 
 9             newBitmapImage.StreamSource = ms;
10 
11             newBitmapImage.EndInit();
12 
13             image1.Source = newBitmapImage;         }

 

转载于:https://www.cnblogs.com/nghygaojun/archive/2013/05/12/3073918.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值