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; }); }