Winform 显示及浏览图片大多使用 PictureBox 控件来做载体。
存储图片到数据库:从本地文件夹下选择图片文件加载到 PictureBox ,再从 PictureBox 读取图片数据转化成二进制流存储入数据库。
PictureBox 控件: pic_Photo
// 装载照片
private void tsm_Load_Click(object sender, EventArgs e)
{
OpenFileDialog dia_Image = new OpenFileDialog ();
dia_Image.Filter = " 所有(*.jpg,*.gif,*.jpeg)|*.jpg;*.gif;*.jpeg" ;
if (dia_Image.ShowDialog() == DialogResult .OK)
{
pic_Photo.Image = Image .FromFile(dia_Image.FileName);
}
}
OpenFileDialog 类的 Filter 用法:
dia_Image.Filter = " 所有(*.jpg,*.gif,*.jpeg)|*.jpg;*.gif;*.jpeg" ;
格式:文件类型所明 | 真正需要过滤的文件类型。
如果有多种文件类型,就用分号隔开。
上面的程序做完后,在 pictureBox 中就会显示本地文件中加载的图片,这样就相当于图片预览的效果了。
接下来就是从 pictureBox 中将图片转化成二制流存储进数据库中,当然数据库该字段的类型应定义为 Image 类型,程序该参数相应的定义为 SqlDbType.Image 类型。
// 照片读取入数据库
MemoryStream ms=new MemoryStream () ;
byte [] photoByte;
pic_Photo.Image.Save(ms, pic_Photo.Image.RawFormat);
photoByte = new byte [ms.Length];
ms.Position = 0;
ms.Read(photoByte, 0, Convert .ToInt32(ms.Length));
data.Photo = photoByte;
这边的 data.Photo 是定义的一个实体类中的成员,类型为 byte[]
从数据库读取数据到 PictureBox 中显示:
数据访问层 DAL 从数据库获取数据代码
if (ds.Tables[0].Rows[0]["Photo" ]!=DBNull.Value)
{
data.Photo = (byte [])ds.Tables[0].Rows[0]["Photo" ];
}
在表示层将读取的数据显示到 pictureBox 中以展示给客户。
byte [] picByte = data.Photo;
MemoryStream ms=new MemoryStream ();
ms.Write(picByte, 0, picByte.Length);
pic_Photo.Image = Image .FromStream(ms);