将图像源保存到数据库

时间:2012-10-17 02:10:00

标签: c# wpf

我有WPF Image来自图片对话框的来源分配;

this.imgProduct.Source = new BitmapImage(new Uri(op.FileName)); 

如何审核来源,将其转换为byte array并将其保存到database

谢谢

2 个答案:

答案 0 :(得分:0)

您必须将BitmapImage转换为byte [],然后将其保存到数据库中。

var imageSource = this.imgProduct.Source as BitmapImage;
var stream = imageSource.StreamSource;
Byte[] buffer = null;

if (stream != null && stream.Length > 0)
{
    using (BinaryReader br = new BinaryReader(stream))
    {
        buffer = br.ReadBytes((Int32)stream.Length);
    }
}

// write buffer to the database

P.S。我没有测试过代码,但我认为它有效!

答案 1 :(得分:0)

只要您可以访问op.FileName中的图像文件,就可以轻松获取文件内容。

byte[] imageBuffer = File.ReadAllBytes(op.FileName);

如果图像是从文件Uri加载的(如您的示例所示),您也可以这样做:

byte[] imageBuffer = File.ReadAllBytes(image.UriSource.AbsolutePath);

如果您只有BitmapImage而没有关于从中加载的文件的信息(例如,当它从临时文件或Web资源加载时),您必须使用WPF BitmapEncoders之一对其进行编码。 :

byte[] imageBuffer;
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));

using (MemoryStream stream = new MemoryStream())
{
    encoder.Save(stream);
    imageBuffer = stream.GetBuffer();
}