private static string ExportChapter(string Chapter, string OutputDir, string Format, ILanguage Language, bool SubDir = true, string ProgressMessage = null) { var Pages = Directory.GetFiles(Chapter); if (Pages.Length == 0) { return(null); } Format = Format.TrimStart('.').ToLower(); var ChapName = Path.GetFileName(Chapter.TrimEnd('\\', '/')); var ChapOutDir = SubDir ? Path.Combine(OutputDir, ChapName) : OutputDir; if (!Directory.Exists(ChapOutDir)) { Directory.CreateDirectory(ChapOutDir); } for (int i = 0; i < Pages.Length; i++) { Main.Status = string.Format(ProgressMessage ?? Main.Language.Exporting, i, Pages.Length); Main.SubStatus = ChapName; var Page = Pages[i]; var OutPage = Path.Combine(ChapOutDir, Path.GetFileNameWithoutExtension(Page) + "." + Format); Retry(() => { using (Image Original = Image.FromFile(Page)) { ImageFormat OutFormat = DataTools.GetImageFormat(Format); if (OutFormat.Guid == ImageFormat.Jpeg.Guid) { using (EncoderParameters JpgEncoder = new EncoderParameters(1)) using (EncoderParameter Parameter = new EncoderParameter(Encoder.Quality, 93L)) { ImageCodecInfo JpgCodec = ImageCodecInfo.GetImageDecoders().First(codec => codec.FormatID == ImageFormat.Jpeg.Guid); JpgEncoder.Param[0] = Parameter; Original.Save(OutPage, JpgCodec, JpgEncoder); } } else { Original.Save(OutPage); } } }); } Main.Status = Language.IDLE; Main.SubStatus = ""; return(ChapOutDir); }