예제 #1
0
 /// <summary>
 /// Given a list of scans (each of which is a list of 1 or more images),
 /// split up the images into multiple lists as described by the SaveSeparator parameter.
 /// </summary>
 /// <param name="scans"></param>
 /// <param name="separator"></param>
 /// <returns></returns>
 public static IEnumerable<List<ScannedImage>> SeparateScans(IEnumerable<IEnumerable<ScannedImage>> scans, SaveSeparator separator)
 {
     if (separator == SaveSeparator.FilePerScan)
     {
         foreach (var scan in scans)
         {
             yield return scan.ToList();
         }
     }
     else if (separator == SaveSeparator.FilePerPage)
     {
         foreach (var scan in scans)
         {
             foreach (var image in scan)
             {
                 yield return new List<ScannedImage> { image };
             }
         }
     }
     else if (separator == SaveSeparator.PatchT)
     {
         var images = new List<ScannedImage>();
         foreach (var scan in scans)
         {
             foreach (var image in scan)
             {
                 if (image.PatchCode == PatchCode.PatchT)
                 {
                     image.Dispose();
                     if (images.Count > 0)
                     {
                         yield return images;
                         images = new List<ScannedImage>();
                     }
                 }
                 else
                 {
                     images.Add(image);
                 }
             }
         }
         if (images.Count > 0)
         {
             yield return images;
         }
     }
     else
     {
         yield return scans.SelectMany(x => x.ToList()).ToList();
     }
 }
예제 #2
0
        /// <summary>
        /// Given a list of scans (each of which is a list of 1 or more images),
        /// split up the images into multiple lists as described by the SaveSeparator parameter.
        /// </summary>
        /// <param name="scans"></param>
        /// <param name="separator"></param>
        /// <returns></returns>
        public static IEnumerable <List <ScannedImage> > SeparateScans(IEnumerable <IEnumerable <ScannedImage> > scans, SaveSeparator separator)
        {
            if (separator == SaveSeparator.FilePerScan)
            {
                foreach (var scan in scans)
                {
                    yield return(scan.ToList());
                }
            }
            else if (separator == SaveSeparator.FilePerPage)
            {
                foreach (var scan in scans)
                {
                    foreach (var image in scan)
                    {
                        yield return(new List <ScannedImage> {
                            image
                        });
                    }
                }
            }
            else if (separator == SaveSeparator.PatchT)
            {
                var images = new List <ScannedImage>();
                foreach (var scan in scans)
                {
                    foreach (var image in scan)
                    {
                        if (image.PatchCode == PatchCode.PatchT)
                        {
                            image.Dispose();
                            if (images.Count > 0)
                            {
                                yield return(images);

                                images = new List <ScannedImage>();
                            }
                        }
                        else
                        {
                            images.Add(image);
                        }
                    }
                }
                if (images.Count > 0)
                {
                    yield return(images);
                }
            }
            else
            {
                yield return(scans.SelectMany(x => x.ToList()).ToList());
            }
        }
예제 #3
0
        /// <summary>
        /// Given a list of scans (each of which is a list of 1 or more images),
        /// split up the images into multiple lists as described by the SaveSeparator parameter.
        /// </summary>
        /// <param name="scans"></param>
        /// <param name="separator"></param>
        /// <param name="splitSize"></param>
        /// <returns></returns>
        public static IEnumerable <List <ScannedImage> > SeparateScans(IEnumerable <IEnumerable <ScannedImage> > scans, SaveSeparator separator, int splitSize = 1)
        {
            if (separator == SaveSeparator.FilePerScan)
            {
                foreach (var scan in scans)
                {
                    yield return(scan.ToList());
                }
            }
            else if (separator == SaveSeparator.FilePerPage)
            {
                splitSize = Math.Max(splitSize, 1);
                foreach (var scan in scans.Select(x => x.ToList()))
                {
                    for (int i = 0; i < scan.Count; i += splitSize)
                    {
                        yield return(scan.Skip(i).Take(splitSize).ToList());
                    }
                }
            }
            else if (separator == SaveSeparator.PatchT)
            {
                var images = new List <ScannedImage>();
                foreach (var scan in scans)
                {
                    foreach (var image in scan)
                    {
                        if (image.PatchCode == PatchCode.PatchT)
                        {
                            image.Dispose();
                            if (images.Count > 0)
                            {
                                yield return(images);

                                images = new List <ScannedImage>();
                            }
                        }
                        else
                        {
                            images.Add(image);
                        }
                    }
                }
                if (images.Count > 0)
                {
                    yield return(images);
                }
            }
            else
            {
                yield return(scans.SelectMany(x => x.ToList()).ToList());
            }
        }