private async void TransitionTimerTickAsync(object sender, EventArgs e)
        {
            TransitionTimer.Stop();

            if (progressBar.Value >= 1f)
            {
                progressBar.Value = 0d;
                EnableUI();
                return;
            }

            BlendingModes   blendingMode   = (BlendingModes)blendingMode_ComboBox.SelectedIndex;
            TransitionModes transitionMode = (TransitionModes)transitionMode_ComboBox.SelectedIndex;
            float           opacity        = Convert.ToSingle(opacity_Slider.Value);

            if (transitionMode == TransitionModes.NoTransition)
            {
                await Task.Run(() => Perform(blendingMode, transitionMode, opacity));

                progressBar.Value = 0d;
                EnableUI();
                return;
            }

            float previousPercentage = Convert.ToSingle(progressBar.Value);
            float percentage         = Convert.ToSingle(progressBar.Value += 0.025d);

            await Task.Run(() => Perform(blendingMode, transitionMode, opacity, previousPercentage, percentage));

            TransitionTimer.Start();
        }
        private void BlendingModeChanged(object sender, SelectionChangedEventArgs e)
        {
            if (IsInitialized)
            {
                BlendingModes blendingMode = (BlendingModes)blendingMode_ComboBox.SelectedIndex;

                if (blendingMode == BlendingModes.Opacity)
                {
                    opacity_Slider.IsEnabled = true;
                }
                else
                {
                    opacity_Slider.IsEnabled = false;
                }
            }
        }
        private void Perform(BlendingModes blendingMode, TransitionModes transitionMode, float opacity, float previousPercentage = 0f, float percentage = 1f)
        {
            switch (blendingMode)
            {
            case BlendingModes.Opacity:
                MyImageResult.Opacity(MyImage2, opacity, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Darken:
                MyImageResult.Darken(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Multiply:
                MyImageResult.Multiply(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Lighten:
                MyImageResult.Lighten(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Screen:
                MyImageResult.Screen(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.ColorBurn:
                MyImageResult.ColorBurn(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.LinearBurn:
                MyImageResult.LinearBurn(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.ColorDodge:
                MyImageResult.ColorDodge(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.LinearDodge:
                MyImageResult.LinearDodge(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Overlay:
                MyImageResult.Overlay(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.SoftLight:
                MyImageResult.SoftLight(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.HardLight:
                MyImageResult.HardLight(MyImage2, transitionMode, previousPercentage, percentage);
                break;

            case BlendingModes.Difference:
                MyImageResult.Difference(MyImage2, transitionMode, previousPercentage, percentage);
                break;
            }

            WriteableBitmap writeableBitmap;

            if (transitionMode == TransitionModes.Fade)
            {
                writeableBitmap = MyImageResult.Fade(MyImage1, percentage);
            }
            else
            {
                writeableBitmap = MyImageResult.WriteableBitmap.Clone();
                writeableBitmap.Freeze();
            }

            Dispatcher.Invoke(() =>
            {
                resultImage.Source = writeableBitmap;
            });
        }