@@ -19,20 +19,54 @@ public EffectsView()
1919 {
2020 BrightnessSlider . ValueChanged += async ( _ , e ) => await BrightnessChanged ( e ) . ConfigureAwait ( false ) ;
2121 ContrastSlider . ValueChanged += async ( _ , e ) => await ContrastChanged ( e ) . ConfigureAwait ( false ) ;
22- EmbossSlider . ValueChanged += async ( _ , e ) => await EmbossChanged ( e ) . ConfigureAwait ( false ) ;
23- if ( DataContext is not MainViewModel vm )
22+ BlackAndWhiteToggleButton . Click += async ( _ , _ ) =>
2423 {
25- return ;
26- }
24+ if ( ! BlackAndWhiteToggleButton . IsChecked . HasValue )
25+ {
26+ return ;
27+ }
2728
28- if ( ! NavigationHelper . CanNavigate ( vm ) )
29- {
30- return ;
31- }
29+ if ( BlackAndWhiteToggleButton . IsChecked . Value )
30+ {
31+ await ApplyEffects ( DataContext as MainViewModel ) ;
32+ }
33+ else
34+ {
35+ await RemoveEffects ( DataContext as MainViewModel ) ;
36+ }
37+ } ;
3238
33- // using var magick = new ImageMagick.MagickImage(vm.FileInfo);
34- // BrightnessSlider.Value = magick.get
39+ NegativeToggleButton . Click += async ( _ , _ ) =>
40+ {
41+ if ( ! NegativeToggleButton . IsChecked . HasValue )
42+ {
43+ return ;
44+ }
45+ if ( NegativeToggleButton . IsChecked . Value )
46+ {
47+ await ApplyEffects ( DataContext as MainViewModel ) ;
48+ }
49+ else
50+ {
51+ await RemoveEffects ( DataContext as MainViewModel ) ;
52+ }
53+ } ;
54+ EmbossToggleButton . Click += async ( _ , _ ) =>
55+ {
56+ if ( ! EmbossToggleButton . IsChecked . HasValue )
57+ {
58+ return ;
59+ }
3560
61+ if ( EmbossToggleButton . IsChecked . Value )
62+ {
63+ await ApplyEffects ( DataContext as MainViewModel ) ;
64+ }
65+ else
66+ {
67+ await RemoveEffects ( DataContext as MainViewModel ) ;
68+ }
69+ } ;
3670 } ;
3771 }
3872
@@ -48,7 +82,7 @@ private async Task BrightnessChanged(RangeBaseValueChangedEventArgs e)
4882 {
4983 return ;
5084 }
51- await SetBrightnessContrast ( vm ) ;
85+ await ApplyEffects ( vm ) ;
5286 }
5387
5488 private async Task ContrastChanged ( RangeBaseValueChangedEventArgs e )
@@ -63,43 +97,51 @@ private async Task ContrastChanged(RangeBaseValueChangedEventArgs e)
6397 {
6498 return ;
6599 }
66- await SetBrightnessContrast ( vm ) ;
100+ await ApplyEffects ( vm ) ;
67101 }
68102
69- private async Task SetBrightnessContrast ( MainViewModel vm )
103+ private async Task ApplyEffects ( MainViewModel vm )
70104 {
105+ var negative = NegativeToggleButton . IsChecked . HasValue && NegativeToggleButton . IsChecked . Value ;
106+ var blackAndWhite = BlackAndWhiteToggleButton . IsChecked . HasValue && BlackAndWhiteToggleButton . IsChecked . Value ;
107+ var emboss = EmbossToggleButton . IsChecked . HasValue && EmbossToggleButton . IsChecked . Value ;
71108 using var magick = new MagickImage ( ) ;
72109 await magick . ReadAsync ( vm . FileInfo . FullName ) . ConfigureAwait ( false ) ;
73110 magick . BrightnessContrast ( _brightness , _contrast ) ;
74111 magick . Format = MagickFormat . WebP ;
75112 magick . BackgroundColor = MagickColors . Transparent ;
76113 magick . Settings . BackgroundColor = MagickColors . Transparent ;
77114 magick . Settings . FillColor = MagickColors . Transparent ;
115+ if ( negative )
116+ {
117+ magick . Negate ( ) ;
118+ }
119+
120+ if ( blackAndWhite )
121+ {
122+ magick . Grayscale ( ) ;
123+ }
124+
125+ if ( emboss )
126+ {
127+ magick . Emboss ( ) ;
128+ }
129+
78130 await using var memoryStream = new MemoryStream ( ) ;
79131 await magick . WriteAsync ( memoryStream ) ;
80132 memoryStream . Position = 0 ;
81133 var bitmap = new Bitmap ( memoryStream ) ;
82134 vm . ImageSource = bitmap ;
83135 }
84136
85- private async Task EmbossChanged ( RangeBaseValueChangedEventArgs e )
137+ private async Task RemoveEffects ( MainViewModel vm )
86138 {
87- if ( DataContext is not MainViewModel vm )
88- {
89- return ;
90- }
91-
92- if ( ! NavigationHelper . CanNavigate ( vm ) )
93- {
94- return ;
95- }
96139 using var magick = new MagickImage ( ) ;
97140 await magick . ReadAsync ( vm . FileInfo . FullName ) . ConfigureAwait ( false ) ;
98141 magick . Format = MagickFormat . WebP ;
99142 magick . BackgroundColor = MagickColors . Transparent ;
100143 magick . Settings . BackgroundColor = MagickColors . Transparent ;
101144 magick . Settings . FillColor = MagickColors . Transparent ;
102- magick . Emboss ( 0 , e . NewValue ) ;
103145 await using var memoryStream = new MemoryStream ( ) ;
104146 await magick . WriteAsync ( memoryStream ) ;
105147 memoryStream . Position = 0 ;
0 commit comments