我有以下情况:
用于显示图像的Image控件和用于选择它的打开文件对话框的按钮。之后该图像将保存到数据库中。但是,如果用户没有选择任何图像,我该如何显示默认图像并以与选择它相同的方式保存?
byte[] dtImagem = null;
private void btnAddImg(object sender, RoutedEventArgs e)
{
OpenFileDialog _fd = new OpenFileDialog();
if (_fd.ShowDialog() == true)
{
try
{
_fs = new FileStream(_fd.FileName, FileMode.Open, FileAccess.Read);
dtImagem = new byte[_fs.Length];
_fs.Read(dadosImagem, 0, System.Convert.ToInt32(_fs.Length));
_fs.Close();
ImageSourceConverter imgs = new ImageSourceConverter();
imgPessoa.SetValue(Image.SourceProperty, imgs.ConvertFromString(_fd.FileName.ToString()));
}
catch (Exception ex)
{
MessageBox.Show("Erro :: " + ex.Message);
}
}
else
{
//Here is the problem how can i use dtImage and save it on database?
var uri = new Uri(@"/AppWPF;component/Images/images.png");
ImageSourceConverter imgs = new ImageSourceConverter();
imgPessoa.SetValue(Image.SourceProperty,imgs.ConvertFromString(uri.ToString()));
}
}
我插入数据库的代码有效,我只需要一种方法来添加默认图像,如果用户不选择
答案 0 :(得分:1)
可能最好从头开始使用默认值初始化图像,并将图像显示给用户,以便他们知道将要保存的内容。您可以同时初始化dtImagem
。这样你就不需要else
中的btnAddImg
,也许只需要额外的按钮就可以将图像重置为默认值...但这取决于你:)
要回答你的问题 - 如何从资源中获取字节数组的答案是:
var info = Application.GetResourceStream(uri);
using (var memoryStream = new MemoryStream())
{
info.Stream.CopyTo(memoryStream);
dtImagem = memoryStream.ToArray();
}