2013-07-10 45 views
2

下面是 C#的foreach图像

  • 然后,它使用一些代码,

    1. 的文件夹中创建一个目录
    2. 使用MagickNet隐蔽一个PDF成单独的BMP图像,并将其存储(的ImagePath) TessNet2扫描该文件夹中的每个图像来解析出信息

    我似乎无法得到扫描ImagePath文件夹的foreach循环。任何帮助?

    的错误,现在是在“的foreach”声明,它说:“无法将类型‘字符’到‘为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"); 
          } 
         } 
        }  
    
  • 回答

    2

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

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

    我不知道这种方法。完美的作品,使我不必浪费空间创建图像。谢谢! – MaylorTaylor

    1

    您通过String ImagePath循环,它给你字符集合。你需要通过目录与Directory.GetFiles()Image.FromFile()进行搜索,并加载图像:

    foreach (String itemPath in Directory.GetFiles(ImagePath)) 
    { 
        using (Image item = Image.FromFile(itemPath)) 
        { 
         ... 
        } 
    } 
    
    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)) 
        { 
        } 
    } 
    
    +0

    我错过了MaylorTaylor加载图像后想要的位图。过滤器也是一个很好的想法。 – TheEvilPenguin

    +0

    说大约2小时前:) [这里](http://stackoverflow.com/a/17930913/1324033) – Sayse