private static bool IsSupportedImageFile(IFormFile file)
        {
            byte[] fileBytes;
            using (var ms = new MemoryStream())
            {
                file.CopyTo(ms);
                fileBytes = ms.ToArray();
            }

            return(SupportedImageFormats.GetImageFormat(fileBytes) != SupportedImageFormats.ImageFormat.unknown);
        }
 public void ConvertImagesFromFolder(string sourceFolder, string outputFolder, List<SupportedImageFormats> sourceFormats, SupportedImageFormats outputFormat)
 {
     MainWindow.StateControl(true);
     MainWindow.TxtProgressText.Visibility = Visibility.Visible;
     MainWindow.TxtProgressText.Text = "Search files, please wait...";
     MainWindow.TxtProgressText.Foreground = new SolidColorBrush(Colors.Blue);
     DoEvents();
     var foundFiles = new List<string>();
     foreach (var sourceFormat in sourceFormats) {
         var mask = string.Format("*.{0}", sourceFormat.ToString().ToLower());
         foundFiles.AddRange(Directory.GetFiles(sourceFolder, mask, SearchOption.AllDirectories));
     }
     MainWindow.PbProgress.Visibility = Visibility.Visible;
     MainWindow.PbProgress.Value = 0;
     MainWindow.PbProgress.Maximum = foundFiles.Count;
     MainWindow.HasStop = false;
     foreach (var foundFile in foundFiles) {
         if (MainWindow.HasStop) break;
         MainWindow.TxtProgressText.Text = string.Format("{2:0.0}% Convert image {0} to {1}...",
             MainWindow.PbProgress.Value,
             MainWindow.PbProgress.Maximum,
             MainWindow.PbProgress.Value / MainWindow.PbProgress.Maximum * 100);
         MainWindow.TxtProgressText.Foreground = new SolidColorBrush(Colors.SeaGreen);
         MainWindow.PbProgress.Value++;
         DoEvents();
         using (var fs = File.Open(foundFile, FileMode.Open)) {
             FREE_IMAGE_FORMAT targetFormat;
             switch (MainWindow.OutputFormat) {
                 case SupportedImageFormats.Dds: targetFormat = FREE_IMAGE_FORMAT.FIF_DDS; break;
                 case SupportedImageFormats.Png: targetFormat = FREE_IMAGE_FORMAT.FIF_PNG; break;
                 case SupportedImageFormats.Jpg: targetFormat = FREE_IMAGE_FORMAT.FIF_JPEG; break;
                 case SupportedImageFormats.Gif: targetFormat = FREE_IMAGE_FORMAT.FIF_GIF; break;
                 case SupportedImageFormats.Bmp: targetFormat = FREE_IMAGE_FORMAT.FIF_BMP; break;
                 default: continue;
             }
             var tmp = foundFile.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
             var foundFileExt = tmp[tmp.Length - 1];
             var outputFileName = foundFile.Replace(string.Format(@"{0}\", sourceFolder), "")
                                 .Replace(@"\", "_")
                                 .Replace(string.Format(".{0}", foundFileExt), string.Format(".{0}", outputFormat.ToString().ToLower()));
             outputFileName = string.Format(@"{0}\{1}", outputFolder, outputFileName);
             try {
                 var output = FreeImage.LoadFromStream(fs);
                 if (output.IsNull) continue;
                 switch (targetFormat) {
                     case FREE_IMAGE_FORMAT.FIF_PNG:
                         FreeImage.SaveEx(output, outputFileName, targetFormat, FREE_IMAGE_SAVE_FLAGS.PNG_Z_NO_COMPRESSION);
                         break;
                     case FREE_IMAGE_FORMAT.FIF_GIF:
                         FreeImage.SaveEx(output, outputFileName, targetFormat);
                         break;
                     case FREE_IMAGE_FORMAT.FIF_JPEG:
                         FreeImage.SaveEx(output, outputFileName, targetFormat, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYGOOD);
                         break;
                     case FREE_IMAGE_FORMAT.FIF_DDS:
                         FreeImage.SaveEx(output, outputFileName, targetFormat);
                         break;
                     case FREE_IMAGE_FORMAT.FIF_BMP:
                         FreeImage.SaveEx(output, outputFileName, targetFormat);
                         break;
                 }
             } catch (Exception ex) { }
             ClearMemory();
         }
     }
     MainWindow.PbProgress.Visibility = Visibility.Collapsed;
     MainWindow.TxtProgressText.Visibility = Visibility.Collapsed;
     MainWindow.StateControl(false);
 }