Как сохранить набор изображений после внутренней обработки?

#c# #image

#c# #изображение

Вопрос:

Я пытался сохранить набор изображений после некоторой обработки. Вот что я делал: 1 — Получить все файлы из каталога 2 — Обработать их все 3 — Сохранить

В качестве иллюстрации: у меня в папке 128 изображений, когда я пытаюсь обработать их и сохранить снова, она (программа) сохраняет только несколько из них. Вот мой код.

 foreach (string file in Directory.EnumerateFiles(path, "*.bmp"))
{
    Bitmap bmp = new Bitmap(file);
    string path = txtNewPath.Text  RandonImageName   ".bmp";
    processImage(bmp).Save(path);
}
  

Комментарии:

1. Что вы делаете в processImageCesar ? Происходит ли сохранение именно там? И почему вы повторно создаете новое исключение, которое менее полезно, чем то, которое вы поймали?

2. Не совсем уверен, что понимаю проблему.

3. Привет, Карл-Йохан, здесь происходит сохранение: processImageCesar(bmp).Save(путь);. И исключение, которое я поставил для обработки любых ошибок.

4. Плохая идея. Если вы просто собираетесь выполнить повторную выборку, позвольте исходному исключению всплыть, чтобы вы не потеряли никакой информации. Нам нужно увидеть ваш фактический код (и функцию сохранения), прежде чем мы сможем помочь.

Ответ №1:

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

путь к строке = txtNewPath.Text imageName «.bmp»;

Вы должны изменить переменную imageName на основе текущей перечисляемой file переменной.

Комментарии:

1. Привет, Мохаммад. Я сделал это. Я ввел «imageName», чтобы проиллюстрировать то, что я сделал.

2. Привет. Какие-либо исключения?

Ответ №2:

Я нашел решение, после сохранения каждого изображения я добавил: Thread .Sleep (1000); // Таким образом, приложение будет ждать 1 секунду, прежде чем продолжить сохранение.

Полный код:

 foreach (string file in Directory.EnumerateFiles(path, "*.bmp"))
{
    Bitmap bmp = new Bitmap(file);
    string path = txtNewPath.Text  RandonImageName   ".bmp";
    processImage(bmp).Save(path);    
    Thread.Sleep(1000);
}