C# foreach изображение в папке
Ниже приведен код, который
- создает каталог
- использует MagickNet для преобразования PDF в отдельные изображения BMP и сохраняет его в папке (ImagePath)
- Затем он использует 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))
{
...
}
}