我有一个WPF Image
与图片对话框的源分配;保存图像源到数据库
this.imgProduct.Source = new BitmapImage(new Uri(op.FileName));
我怎样才能retieve源,将其转换为byte array
,并保存到database
?
谢谢
我有一个WPF Image
与图片对话框的源分配;保存图像源到数据库
this.imgProduct.Source = new BitmapImage(new Uri(op.FileName));
我怎样才能retieve源,将其转换为byte array
,并保存到database
?
谢谢
你必须BitmapImage的转换为字节[],然后将其保存到数据库中。
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.我没有测试代码,但我认为它的工作原理!
只要您有权访问op.FileName
中的图像文件,就可以非常容易地通过例如文件获取文件内容。
byte[] imageBuffer = File.ReadAllBytes(op.FileName);
如果图像从一个文件URI加载(如在你的例子),你也可以这样做:
byte[] imageBuffer = File.ReadAllBytes(image.UriSource.AbsolutePath);
如果你只有BitmapImage的无约,这是加载的文件信息从(例如,当它从一个临时文件或网页资源加载),你将不得不通过WPFs BitmapEncoders之一,它编码:
byte[] imageBuffer;
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));
using (MemoryStream stream = new MemoryStream())
{
encoder.Save(stream);
imageBuffer = stream.GetBuffer();
}
StreamSource的将是'null',由于图像是从U形装里。 – Clemens