c#foreach图像文件夹

时间:2013-07-10 22:25:22

标签: c# image foreach tessnet2 magicknet

以下是一些代码

  1. 创建目录
  2. 使用MagickNet将PDF转换为单独的BMP图像并将其存储在文件夹中(ImagePath)
  3. 然后它使用TessNet2扫描该文件夹中的每个图像以解析信息
  4. 我似乎无法获得扫描ImagePath文件夹的foreach循环。有帮助吗?

    现在的错误是在'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 个答案:

答案 0 :(得分:3)

您可以使用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))
    {
    }
}

答案 1 :(得分:2)

您无需将文件保存到磁盘。你可以使用MagickImage的.ToBitmap()方法。

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

答案 2 :(得分:1)

您正在循环浏览String ImagePath,它会为您提供一组字符。您需要使用Directory.GetFiles()搜索目录,然后使用Image.FromFile()加载图片:

foreach (String itemPath in Directory.GetFiles(ImagePath))
{
    using (Image item = Image.FromFile(itemPath))
    {
        ...
    }
}