Esempio n. 1
0
 public BitmapImage ConvertImg()
 {
     var handler = new ImageConversionHandler();
     return handler.Convert(Image);
 }
Esempio n. 2
0
        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
        }