public Tuple <Bitmap, string> Decode(Bitmap encodedImage, AlgorithmConfiguration configuration)
        {
            // Algorithm instances
            DifferencesExpansionAlgorithm de = new DifferencesExpansionAlgorithm();
            HistogramShiftingAlgorithm    hs = new HistogramShiftingAlgorithm();
            // Algorithm configs
            DifferenceExpansionBruteForceConfiguration deConfig = new DifferenceExpansionBruteForceConfiguration(
                new HashSet <EmbeddingChanel>()
            {
                EmbeddingChanel.R, EmbeddingChanel.G, EmbeddingChanel.B
            }, new HashSet <Direction>()
            {
                Direction.Horizontal, Direction.Vertical
            });
            HistogramShiftingConfiguration hsConfig = new HistogramShiftingConfiguration(true,
                                                                                         new HashSet <EmbeddingChanel>()
            {
                EmbeddingChanel.R, EmbeddingChanel.G, EmbeddingChanel.B
            });
            // Decoding
            var deResult = de.BruteforceDecode(encodedImage, deConfig);

            if (deResult != null)
            {
                return(deResult);
            }
            var hsResult = hs.Decode(encodedImage, hsConfig);

            if (hsResult != null)
            {
                return(hsResult);
            }
            return(null);
        }
 private void BtnConfigHS_Click(object sender, RoutedEventArgs e)
 {
     if (isWatermarkingModeSelected())
     {
         HashSet <EmbeddingChanel> set = new HashSet <EmbeddingChanel>();
         set.Add(EmbeddingChanel.R);
         HistogramShiftingConfiguration config = new HistogramShiftingConfiguration(false, set);
         var dialogBox = new ConfigurationDialogBox.HistogramShiftingConfiguraitonDialogBox(
             config.EmbeddingChanels)
         {
             Owner = this,
         };
         dialogBox.ShowDialog();
         if (dialogBox.DialogResult == true)
         {
             if (dialogBox.cbR.IsChecked == true)
             {
                 HashSet <EmbeddingChanel> embeddingChanels = new HashSet <EmbeddingChanel>();
                 if (dialogBox.cbR.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.R);
                 }
                 if (dialogBox.cbG.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.G);
                 }
                 if (dialogBox.cbB.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.B);
                 }
                 currentEncodingHsConfiguration = new HistogramShiftingConfiguration(false, embeddingChanels);
             }
         }
     }
     if (isAnalyzingModeSelected())
     {
         HashSet <EmbeddingChanel> set = new HashSet <EmbeddingChanel>();
         set.Add(EmbeddingChanel.R);
         HistogramShiftingConfiguration config = new HistogramShiftingConfiguration(false, set);
         var dialogBox = new ConfigurationDialogBox.HistogramShiftingConfiguraitonDecodingDialogBox(
             config.EmbeddingChanels)
         {
             Owner = this,
         };
         dialogBox.ShowDialog();
         if (dialogBox.DialogResult == true)
         {
             if (dialogBox.cbR.IsChecked == true)
             {
                 HashSet <EmbeddingChanel> embeddingChanels = new HashSet <EmbeddingChanel>();
                 if (dialogBox.cbR.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.R);
                 }
                 if (dialogBox.cbG.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.G);
                 }
                 if (dialogBox.cbB.IsChecked == true)
                 {
                     embeddingChanels.Add(EmbeddingChanel.B);
                 }
                 currentDecodingHsConfiguration = new HistogramShiftingConfiguration(dialogBox.cbBruteforce.IsChecked == true, embeddingChanels);
             }
         }
     }
 }