internal static void FillStorage(RegionsStorage storage, IList<string[]> fileNamesParts, RegionSuffixRegexes regionSuffixRegexes) { foreach (string[] fileNameStrings in fileNamesParts) { AddOrAppendRegion(storage, fileNameStrings, regionSuffixRegexes); } }
/// <summary> /// Сгенерировать хранилище регионов из изображений /// </summary> /// <param name="path">Путь к папке с изображениями</param> /// <param name="regionSuffixRegexes">Набор регулярных выражений для парсинга названий</param> /// <returns>Хранидище регионов</returns> public static RegionsStorage Generate(string path, RegionSuffixRegexes regionSuffixRegexes) { if (!Directory.Exists(path)) { return DefaultStorage; } folder = path; var storage = new RegionsStorage(); FileInfo[] files = (new DirectoryInfo(folder)).GetFiles("*_*.png"); var sortedFileNames = files.Select(file => file.Name).ToList(); sortedFileNames.Sort(); var separtedFileNames = sortedFileNames.Select(file=>file.Split(regionSuffixRegexes.Separator)).ToList(); FillStorage(storage, separtedFileNames, regionSuffixRegexes); return storage; }
private static void FillRegion(Region region, string suffix, RegionSuffixRegexes regionSuffixRegexes) { string folderName = folder; if (folder.Contains(Environment.CurrentDirectory)) { folderName = Path.GetDirectoryName(folder) ?? folder; } string path = Path.Combine(folderName, region.Name + regionSuffixRegexes.Separator + suffix); if (regionSuffixRegexes.ThumbnailRegex.IsMatch(suffix)) { region.ThumbnailImageName= path; return; } if (regionSuffixRegexes.PatternImageRegex.IsMatch(suffix)) { region.PatternImageName = path; return; } if (regionSuffixRegexes.SourceImageRegex.IsMatch(suffix)) { region.SourceImageName = path; if (File.Exists(path)) { region.Colors = GenerateColorsForImage(path); } } }
private static void AddOrAppendRegion(RegionsStorage storage, string[] fileNameParts, RegionSuffixRegexes regionSuffixRegexes) { var region = storage.FindRegion(fileNameParts[0]); if (region == null) { region = new Region(fileNameParts[0]); storage.Regions.Add(region); } FillRegion(region, fileNameParts[1], regionSuffixRegexes); }