Как сохранить BitmapImage через SaveFileDialog из WPF? - PullRequest
2 голосов
/ 16 ноября 2011

Способ, которым я пытаюсь реализовать его через стандартные 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, но сохраняет чистое изображение ((

Ответы [ 2 ]

5 голосов
/ 16 ноября 2011

Вы можете сделать что-то подобное:

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 Forms

0 голосов
/ 07 февраля 2017

Для 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

...