Как сохранить изображение по выбранному пути из объекта Stream - PullRequest
1 голос
/ 24 октября 2011

Следующий код предлагает пользователю выбрать путь для сохранения изображения из картинки:

        Stream myStream;
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();            
        saveFileDialog1.Filter = "Portable Network Graphics|*.png";
        saveFileDialog1.Title = "Bild speichern";
        saveFileDialog1.RestoreDirectory = true;
        saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if ((myStream = saveFileDialog1.OpenFile()) != null)
            {
                this.picBox.Image.Save(myStream.ToString()); // is not getting the selected path
                myStream.Close();
            }
        }

Но как я могу получить путь от myStream или сохранить изображение в определенном пользователем месте (с совместимостью с .NET 3.5)?

Ответы [ 4 ]

1 голос
/ 24 октября 2011

вы можете работать только с SaveFileDialog.FileName, не нужно разделять потоки, попробуйте это:

using (var saveFileDialog1 = new SaveFileDialog())
{
    saveFileDialog1.Filter = "Portable Network Graphics|*.png";
    saveFileDialog1.Title = "Bild speichern";
    saveFileDialog1.RestoreDirectory = true;
    saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        picBox.Image.Save(saveFileDialog1.FileName);
    }
}
1 голос
/ 24 октября 2011

Если вы хотите получить выбранный путь к файлу из диалогового окна сохранения, используйте ...

saveFileDialog1.FileName;

См. здесь для получения дополнительной информации об этом свойстве

Вам не нужно беспокоиться об использовании Stream для этой задачи.

Просто чтобы прояснить, вот каким должен быть ваш код ...

SaveFileDialog saveFileDialog1 = new SaveFileDialog();            
saveFileDialog1.Filter = "Portable Network Graphics|*.png";
saveFileDialog1.Title = "Bild speichern";
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    this.picBox.Image.Save(saveFileDialog1.FileName);
}
0 голосов
/ 24 октября 2011

Как это?

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Portable Network Graphics|*.png";
saveFileDialog1.Title = "Bild speichern";
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    (using FileStream fStr = new FileStream(saveFileDialog1.FileName, FileMode.Create))
    {
        this.picBox.Image.Save(fStr);
        fStr.Close();
    }
}
0 голосов
/ 24 октября 2011

Вы можете использовать:

string path = Path.GetDirectory(saveFileDialog1.Filename);
this.picBox.Image.Save(saveFileDialog1.Filename);

Вам действительно не нужен поток, чтобы сделать это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...