如何通过 WPF 中的 SaveFileDialog 保存 BitmapImage?
Posted
技术标签:
【中文标题】如何通过 WPF 中的 SaveFileDialog 保存 BitmapImage?【英文标题】:How to save BitmapImage via SaveFileDialog from WPF? 【发布时间】:2011-11-16 13:34:57 【问题描述】:我尝试通过标准 Windows.Forms 实现它的方式(以获取有效的 DialogResult.OK)
System.Windows.Forms.SaveFileDialog dlg = new System.Windows.Forms.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
// dlg.DefaultExt = ".jpg"; // Default file extension
dlg.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
if(dlg.ShowDialog()== System.Windows.Forms.DialogResult.OK)
if (dlg.DialogResult.HasValue && splashDialog.DialogResult.Value)
string fName = dlg.FileName;
if (dlg.FileName != "")
System.IO.Stream fileStream = (System.IO.FileStream)dlg.OpenFile();
fileStream.Close();
这是使用 Windows 窗体,但它保存空白图像((
【问题讨论】:
你只是打开和关闭文件,你从来没有在其中写入图像...... 【参考方案1】:你可以这样做:
var encoder = new JpegBitmapEncoder(); // Or PngBitmapEncoder, or whichever encoder you want
encoder.Frames.Add(BitmapFrame.Create(yourImage));
using (var stream = dlg.OpenFile())
encoder.Save(stream);
顺便说一句,WPF 中也有一个SaveFileDialog
,你不必使用 Windows 窗体中的那个
【讨论】:
只需使用Microsoft.Win32.SaveFileDialog
而不是System.Windows.Forms.SaveFileDialog
【参考方案2】:
对于 WPF 代码将是这样的:
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document";
dlg.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
if (dlg.ShowDialog() == true)
var encoder = new JpegBitmapEncoder(); // Or PngBitmapEncoder, or whichever encoder you want
encoder.Frames.Add(BitmapFrame.Create(bi));
using (var stream = dlg.OpenFile())
encoder.Save(stream);
这里 bi 是 BitmapImage
【讨论】:
以上是关于如何通过 WPF 中的 SaveFileDialog 保存 BitmapImage?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过行和列索引以编程方式访问 WPF Grid 中的控件?
如何通过XAML,WPF中的数据绑定设置VisualState INITIALIZATION
WPF - 如何强制命令通过其 CommandBindings 重新评估“CanExecute”