public BitmapImage ConvertImg() { var handler = new ImageConversionHandler(); return handler.Convert(Image); }
private async void StartConversionBttn_MouseDown(object sender, MouseButtonEventArgs e) { //If a format hasn't been selected prompt user to select one and don't convert if (FormatComboBox.SelectedItem == null) { if (Settings.Default.Language == "it") { MessageBox.Show(LanguageManager.IT_SelectFormatMsgBox, "Errore", MessageBoxButton.OK, MessageBoxImage.Information); } else if (Settings.Default.Language == "en") { MessageBox.Show(LanguageManager.EN_SelectFormatMsgBox, "Error", MessageBoxButton.OK, MessageBoxImage.Information); } return; } //If one or more images aren't in their original folder anymore don't convert foreach (var image in local_pathsOfImagesToConvert) { if (!Directory.GetFiles(Path.GetDirectoryName(local_pathsOfImagesToConvert[0])).Contains(image)) { if (Settings.Default.Language.ToLower() == "it") { MessageBox.Show(LanguageManager.IT_CantFindImagesToConvertInOriginalFolder, "Errore", MessageBoxButton.OK, MessageBoxImage.Error); } if (Settings.Default.Language.ToLower() == "en") { MessageBox.Show(LanguageManager.EN_CantFindImagesToConvertInOriginalFolder, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } return; } } //Get the selected icon sizes. If the user hasn't selected at least 1 option in the IconSizesMatrixGrid don't convert List <string> selectedIconSizes = new List <string>(); var selectedFormat = (FormatComboBox.SelectedItem as Label).Content.ToString().ToLower(); if (selectedFormat == "ico" || selectedFormat == "cur") //If the user has selected the ico format { selectedIconSizes = new List <string>(); foreach (CheckBox option in IconSizesMatrixGrid.Children) { if ((bool)option.IsChecked == true) { selectedIconSizes.Add(option.Content.ToString()); } } if (selectedIconSizes.Count == 0) { if (Settings.Default.Language == "it") { MessageBox.Show(LanguageManager.IT_SelectOneIconSize, "Errore", MessageBoxButton.OK, MessageBoxImage.Exclamation); } if (Settings.Default.Language == "en") { MessageBox.Show(LanguageManager.EN_SelectOneIconSize, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } } #region Prepares GUI controls if (Settings.Default.Language == "it") { ConversionResultTextBlock.Text = LanguageManager.IT_ConversionResultTextBlockRunning; } if (Settings.Default.Language == "en") { ConversionResultTextBlock.Text = LanguageManager.EN_ConversionResultTextBlockRunning; } ConversionResultTextBlock.Visibility = Visibility.Collapsed; //Necessary because if the user converts one image two times in a row it would seem like the conversion didn't start ThemeManager.solidColorBrush.Color = ThemeManager.RunningOrStaticConversionTextBlockColor; ConversionResultTextBlock.Foreground = ThemeManager.solidColorBrush; //Sets the color of the textblock ConversionResultTextBlock.Visibility = Visibility.Visible; //Makes the label of the state of the conversion visible StartConversionBttn.IsEnabled = false; //While a conversion is ongoing the convertbttn gets disabled //Add a dot to the conversion result textblock Thread ticker = new Thread(() => { int i = 0; while (true) { Dispatcher.Invoke(() => { if (i >= 3) { ConversionResultTextBlock.Text = ConversionResultTextBlock.Text.TrimEnd('.'); i = 0; } ConversionResultTextBlock.Text += "."; i++; }); Thread.Sleep(300); } }); ticker.IsBackground = true; #endregion finishedConversions = new Dictionary <string, bool>(); ConversionParamsModel conversionParameters = new ConversionParamsModel(); try { //Prepare image conversion parameters conversionParameters = new ConversionParamsModel() { format = (FormatComboBox.SelectedItem as Label).Content.ToString().ToLower(), pathsOfImagesToConvert = local_pathsOfImagesToConvert, gifRepeatTimes = repGifTimes, colorToReplTheTranspWith = ReplTranspColCB.SelectedIndex, delayTime = Convert.ToInt32(GifFramesDelayOptionTextBox.Text) / 10, //Divided by 10 because the delay is needed in centiseconds iconSizes = selectedIconSizes, qualityLevel = Convert.ToInt32(QualityLevelTextBox.Text.Trim('%', ' ')), tiffCompressionAlgo = (CompressionTypesCB.SelectedItem as Label)?.Content.ToString().ToLower(), saveDirectory = SavePathTextBlock.Text, }; //Adds a dot during conversion to show the loading ticker.Start(); //Starts timer to measure how long the conversion takes timer.Start(); //Start conversion ImageConversionHandler imgConvHandler = new ImageConversionHandler(); finishedConversions = await Task.Run(() => imgConvHandler.StartConversionAsync(conversionParameters)); timer.Stop(); ticker.Abort(); #region Counts the unsuccessful conversions //List containing the names of the images that didn't get converted successfully List <string> unsuccessfulConversions = new List <string>(); foreach (var conversion in finishedConversions) { if (conversion.Value == false) { unsuccessfulConversions.Add(Path.GetFileName(conversion.Key)); } } #endregion #region Displays the result(s) of the conversion(s) //If there were no errors if (unsuccessfulConversions.Count == 0) { ThemeManager.solidColorBrush = new SolidColorBrush { Color = ThemeManager.CompletedConversionTextBlockColor }; ConversionResultTextBlock.Foreground = ThemeManager.solidColorBrush; if (Settings.Default.Language == "it") { if (local_pathsOfImagesToConvert.Count == 1) { ConversionResultTextBlock.Text = LanguageManager.IT_ConversionResultTextBlockFinishedText; } else { ConversionResultTextBlock.Text = LanguageManager.IT_MultipleConversionResultTextBlockFinishedText; } } else if (Settings.Default.Language == "en") { ConversionResultTextBlock.Text = LanguageManager.EN_ConversionResultTextBlockFinishedText; } ConversionResultTextBlock.Text += $" in {(int)timer.Elapsed.TotalMilliseconds}ms"; //Time taken to convert the images in milliseconds } //If there was any error else { ThemeManager.solidColorBrush = new SolidColorBrush { Color = ThemeManager.CompletedWithErrorsConversionTextBlockColor }; ConversionResultTextBlock.Foreground = ThemeManager.solidColorBrush; if (Settings.Default.Language == "it") { ConversionResultTextBlock.Text = LanguageManager.IT_UnsuccConversionResultTextBlockFinishedText; } else if (Settings.Default.Language == "en") { ConversionResultTextBlock.Text = LanguageManager.EN_UnsuccConversionResultTextBlockFinishedText; } //Display the unsuccessful conversions foreach (var conversion in unsuccessfulConversions) { ConversionResultTextBlock.Text += conversion + ", "; } } #endregion timer.Reset(); } catch (Exception ex) { timer.Stop(); timer.Reset(); ticker.Abort(); //Create error log using (StreamWriter st = File.CreateText($"{Settings.Default.TempFolderPath}\\ErrorLog.txt")) { st.WriteLine(DateTime.Now); st.WriteLine("Conversion parameters:"); st.WriteLine(conversionParameters.pathsOfImagesToConvert); st.WriteLine("\n Message:"); st.WriteLine(ex.Message + "\n -----------------------------------------------------------"); st.WriteLine("\n StackTrace:"); st.WriteLine(ex.StackTrace + "\n -----------------------------------------------------------"); st.WriteLine("\n Source:"); st.WriteLine(ex.Source + "\n -----------------------------------------------------------"); st.WriteLine("\n TargetSite:"); st.WriteLine(ex.TargetSite + "\n -----------------------------------------------------------"); st.WriteLine("\n InnerException:"); st.WriteLine(ex.InnerException + "\n -----------------------------------------------------------"); st.WriteLine("\n Data:"); st.WriteLine(ex.Data + "\n -----------------------------------------------------------"); st.WriteLine("\n Help link:"); st.WriteLine(ex.HelpLink); } //Show error msgBox if (Settings.Default.Language == "it") { MessageBox.Show(LanguageManager.IT_UnexpectedErrorMsgBoxText, "Unexpected error", MessageBoxButton.OK, MessageBoxImage.Error); } else if (Settings.Default.Language == "en") { MessageBox.Show(LanguageManager.EN_UnexpectedErrorMsgBoxText, "Unexpected error", MessageBoxButton.OK, MessageBoxImage.Error); } //Open explorer in the temp folder with the error log selected string argument = "/select, \"" + $"{Settings.Default.TempFolderPath}\\ErrorLog.txt" + "\""; Process.Start("explorer.exe", argument); ThemeManager.solidColorBrush = new SolidColorBrush { Color = ThemeManager.CompletedWithErrorsConversionTextBlockColor }; ConversionResultTextBlock.Foreground = ThemeManager.solidColorBrush; ConversionResultTextBlock.Text = "error"; } StartConversionBttn.Visibility = Visibility.Hidden; //Unbug the button Thread.Sleep(100); StartConversionBttn.Visibility = Visibility.Visible; StartConversionBttn.IsEnabled = true; //Re-enables the convertbttn to convert another image }