2

下面是一些代码

  1. 创建一个目录
  2. 使用 MagickNet 将 PDF 转换为单独的 BMP 图像并将其存储在文件夹中 (ImagePath)
  3. 然后它使用 TessNet2 扫描该文件夹中的每个图像以解析出信息

我似乎无法获得扫描 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");
            }
        }
    }       
4

3 回答 3

4

您可以使用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))
    {
    }
}
于 2013-07-10T22:33:57.777 回答
2

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

foreach (MagickImage image in images)
{
  using (Bitmap bmp = image.ToBitmap())
  {
    tessnet2.Tesseract tessocr = new tessnet2.Tesseract();
    // etc...
  }
}
于 2013-07-11T16:49:01.840 回答
1

您正在循环String ImagePath,它为您提供了一组字符。您需要使用 搜索目录Directory.GetFiles(),并使用 加载图像Image.FromFile()

foreach (String itemPath in Directory.GetFiles(ImagePath))
{
    using (Image item = Image.FromFile(itemPath))
    {
        ...
    }
}
于 2013-07-10T22:33:32.557 回答