Member 14766911 Ответов: 3

C# сохранение файлов изображений с помощью savefiledialog или folderbrowserdialog


Я пытаюсь сохранить файлы изображений, которые преобразуются из PDF в PNG. Я хочу, чтобы мое приложение сохраняло преобразованное изображение, если PDF-файл был одностраничным документом с помощью "SaveFileDialog", а если PDF-файл был многостраничным документом, то я хочу, чтобы мое приложение сохраняло их в папку с помощью "FolderBrowserDialog".

Моя проблема заключается в том, что если бы PDF-файл был многостраничным документом, мой код сначала сохранил бы первое изображение (после преобразования) с помощью "SaveFileDialog", прежде чем пытаться сохранить остальные изображения с помощью "FolderBrowserDialog".

Вот что я попробовал сделать.

Что я уже пробовал:

Image = imageToConvert = null;

for (int i = 0; i < images.Length; i++)
{
    if (i == 0)
    {
        //Save converted image if PDF is single page
         imageToConvert = images[i];

        SaveFileDialog _saveFile = new SaveFileDialog();
        _saveFile.Title = "Save file";
        _saveFile.Filter = "PNG|*.png";
        _saveFile.FileName = Lbl_OriginalFileName.Text;


        if (_saveFile.ShowDialog() == DialogResult.OK)
        {
            imageToConvert.Save(_saveFile.FileName, ImageFormat.Png);

            imageToConvert.Dispose();
        }
        else if (_saveFile.ShowDialog() == DialogResult.Cancel)
        {
            return;
        }
    }
    else
    {
        if (i > 0)
        {
            // Save converted Images if PDF is multi-page
            Image imageToConvert2 = images[i];

            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.ShowDialog();
            fbd.Description = "Select the folder you want save your files into.";

            string pathString = Path.Combine(fbd.SelectedPath, subFolder);
            Directory.CreateDirectory(pathString);

            if (fbd.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            
                string saveFileNamesPNG = string.Format(Lbl_OriginalFileName.Text + "_" + i.ToString() + ".png", ImageFormat.Png);
                imageToConvert.Save(Path.Combine(pathString, saveFileNamesPNG));
           
            imageToConvert.Dispose();
        }
    }
}


Я был бы очень признателен за любую помощь.

Richard MacCutchan

Зачем вам нужны два разных диалога? Просто используйте SaveFileDialog и позвольте пользователю решить, где его сохранить и как назвать. Вы должны проверить количество изображений перед запуском цикла for; первое изображение всегда будет иметь значение индекса, равное нулю.

Member 14766911

Мне нужны два диалоговых окна, потому что я хочу, чтобы пользователь сохранил одностраничный PDF-файл, который был преобразован в изображение с помощью "SaveFileDialog", и если PDF-файл многостраничный, я хочу, чтобы пользователь сохранил эти изображения в папку с помощью "FolderBrowserDialog".

Richard MacCutchan

Вы все еще можете сделать это с помощью одного диалога.

BillWoodruff

Где находится тест, который определяет, существует ли одно изображение или несколько ?

Member 14766911

Я использую операторы If после цикла for, чтобы проверить это

3 Ответов

Рейтинг:
25

OriginalGriff

Поэтому переместите тест за пределы цикла. Если есть одна страница, используйте SaveFileDialog. Если их больше одного, используйте FolderBrowserDialog, а затем ваш цикл без проверки, которую он делает в данный момент.


Рейтинг:
19

BillWoodruff

Вы делаете одно и то же каждый раз, когда 'i == 0 ... 'i-это индекс for-loop: вам действительно не нужно проверять, когда появляются изображения.Длина - #1 в каком случае вы показываете filedialog ? И, если образы.Длина > #1, Вы сохраняете несколько изображений в одной папке ?

Прямо сейчас вы показываете изображения folderbrowserdialog.Длина - 1 раз: это кажется неправильным.


Рейтинг:
0

Member 14766911

Так что после перемещения теста за пределы цикла теперь все работает совершенно нормально!!

Всем огромное спасибо!