C# foreach изображение в папке

Ниже приведен код, который

  1. создает каталог
  2. использует MagickNet для преобразования PDF в отдельные изображения BMP и сохраняет его в папке (ImagePath)
  3. Затем он использует TessNet2 для сканирования каждого изображения в этой папке, чтобы проанализировать информацию

Я не могу получить цикл foreach, который сканирует папку ImagePath. Любая помощь?

В данный момент ошибка находится в операторе 'foreach', и он говорит: "Невозможно преобразовать тип" char "в" System.Drawing.Image ""

static void Main(string[] args)
    {
        string ImagePath = exePath + "\\Images"; 
        if (!Directory.Exists(ImagePath))
        {
            Directory.CreateDirectory(ImagePath);
        }

        MagickReadSettings settings = new MagickReadSettings();
        settings.Density = new MagickGeometry(300, 300);

        using (MagickImageCollection images = new MagickImageCollection())
        {
            images.Read(@"D:\Test\ABStest.pdf",settings);
            int page = 1;
            foreach (MagickImage image in images)
            {
                image.Write(ImagePath + "\\ABS" + page + ".bmp");
                page++;
            }
        }



        foreach (Image item in ImagePath)
        {
            using (Bitmap bmp = new Bitmap(item))
            {
                tessnet2.Tesseract tessocr = new tessnet2.Tesseract();
                tessocr.Init(@"C:\Users\Matt Taylor\Documents\Visual Studio 2012\Projects\TessNet2\TessNet2\bin\Debug\tessdata", "eng", false);
                tessocr.GetThresholdedImage(bmp, Rectangle.Empty).Save("c:\\temp\\" + Guid.NewGuid().ToString() + ".bmp");
                // Tessdata directory must be in the directory than this exe
                Console.WriteLine("Multithread version");
                ocr.DoOCRMultiThred(bmp, "eng");
                //Console.WriteLine("Normal version");
                //ocr.DoOCRNormal(bmp, "eng");
            }
        }
    }       

3 ответа

Решение

Вам не нужно сохранять файл на диск. Вы можете использовать.ToBitmap() метод MagickImage.

foreach (MagickImage image in images)
{
  using (Bitmap bmp = image.ToBitmap())
  {
    tessnet2.Tesseract tessocr = new tessnet2.Tesseract();
    // etc...
  }
}

Ты можешь использовать Directory.GetFiles вернуть все имена файлов в каталоге и создать свой Bitmaps оттуда

foreach (string imageFileName in Directory.GetFiles(ImagePath))
{
    using (Bitmap bmp = new Bitmap(imageFileName))
    {
    }
}

Но если в этой папке есть другие файлы, вы должны добавить фильтр

foreach (string imageFileName in Directory.GetFiles(ImagePath, "*.jpg"))
{
    using (Bitmap bmp = new Bitmap(imageFileName))
    {
    }
}

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

foreach (String itemPath in Directory.GetFiles(ImagePath))
{
    using (Image item = Image.FromFile(itemPath))
    {
        ...
    }
}
Другие вопросы по тегам