diff options
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/IProcessor.cs | 6 | ||||
| -rw-r--r-- | Services/ImageMagickBrightness.cs | 25 | ||||
| -rw-r--r-- | Services/ImageMagickResizer.cs | 34 | ||||
| -rw-r--r-- | Services/Interfaces/IBrightness.cs | 8 | ||||
| -rw-r--r-- | Services/Interfaces/IResizer.cs | 9 | ||||
| -rw-r--r-- | Services/Resizer/IResizer.cs | 7 | ||||
| -rw-r--r-- | Services/Resizer/ImageMagickResizer.cs | 26 |
7 files changed, 80 insertions, 35 deletions
diff --git a/Services/IProcessor.cs b/Services/IProcessor.cs index 11e83ab..00bd6a8 100644 --- a/Services/IProcessor.cs +++ b/Services/IProcessor.cs @@ -1,9 +1,11 @@ using Avalonia.Media.Imaging; +using System.ComponentModel; +using System.Threading.Tasks; namespace Avalar.Services { - public interface IProcessor + public interface IProcessor : INotifyPropertyChanged { - IBitmap Process(IBitmap bitmap); + public IBitmap Process(IBitmap input, System.Threading.CancellationToken token); } } diff --git a/Services/ImageMagickBrightness.cs b/Services/ImageMagickBrightness.cs new file mode 100644 index 0000000..f69247e --- /dev/null +++ b/Services/ImageMagickBrightness.cs @@ -0,0 +1,25 @@ +using Avalar.Services.Interfaces; +using Avalonia.Media.Imaging; +using ImageMagick; +using ReactiveUI; +using System.IO; +using System.Threading; + +namespace Avalar.Services +{ + public class ImageMagickBrightness : ReactiveObject, IBrightness + { + int m_Brightness; + public int Brightness { + get => m_Brightness; + set => this.RaiseAndSetIfChanged(ref m_Brightness, value); + } + + public IBitmap Process(IBitmap input, CancellationToken token) + { + using var image = input.ToMagickImage(); + image.BrightnessContrast(new Percentage(Brightness), new Percentage(0)); + return image.ToBitmap(); + } + } +} diff --git a/Services/ImageMagickResizer.cs b/Services/ImageMagickResizer.cs new file mode 100644 index 0000000..b7ce6da --- /dev/null +++ b/Services/ImageMagickResizer.cs @@ -0,0 +1,34 @@ + +using Avalar.Services.Interfaces; +using Avalonia.Media.Imaging; +using ImageMagick; +using ReactiveUI; +using System; +using System.Threading; + +namespace Avalar.Services +{ + public class ImageMagickResizer : ReactiveObject, IResizer + { + private uint m_Width; + public uint Width { + get => m_Width; + set => this.RaiseAndSetIfChanged(ref m_Width, value); + } + + private uint m_Height; + public uint Height { + get => m_Height; + set => this.RaiseAndSetIfChanged(ref m_Height, value); + } + + public IBitmap Process(IBitmap input, CancellationToken token) + { + using var image = input.ToMagickImage(); + var geometry = new MagickGeometry(Convert.ToInt32(Width), Convert.ToInt32(Height)); + geometry.IgnoreAspectRatio = true; + image.Resize(geometry); + return image.ToBitmap(); + } + } +} diff --git a/Services/Interfaces/IBrightness.cs b/Services/Interfaces/IBrightness.cs new file mode 100644 index 0000000..cf8f631 --- /dev/null +++ b/Services/Interfaces/IBrightness.cs @@ -0,0 +1,8 @@ + +namespace Avalar.Services.Interfaces +{ + interface IBrightness : IProcessor + { + public int Brightness { get; set; } + } +} diff --git a/Services/Interfaces/IResizer.cs b/Services/Interfaces/IResizer.cs new file mode 100644 index 0000000..d7e5cdd --- /dev/null +++ b/Services/Interfaces/IResizer.cs @@ -0,0 +1,9 @@ + +namespace Avalar.Services.Interfaces +{ + public interface IResizer : IProcessor + { + public uint Width { get; set; } + public uint Height { get; set; } + } +} diff --git a/Services/Resizer/IResizer.cs b/Services/Resizer/IResizer.cs deleted file mode 100644 index e71d4f1..0000000 --- a/Services/Resizer/IResizer.cs +++ /dev/null @@ -1,7 +0,0 @@ - -namespace Avalar.Services.Resizer -{ - public interface IResizer : IProcessor - { - } -} diff --git a/Services/Resizer/ImageMagickResizer.cs b/Services/Resizer/ImageMagickResizer.cs deleted file mode 100644 index e48e576..0000000 --- a/Services/Resizer/ImageMagickResizer.cs +++ /dev/null @@ -1,26 +0,0 @@ - -using Avalonia.Media.Imaging; -using ImageMagick; -using System.IO; - -namespace Avalar.Services.Resizer -{ - public class ImageMagickResizer : IResizer - { - public IBitmap Process(IBitmap bitmap) - { - using (var stream = new MemoryStream()) - { - bitmap?.Save(stream); - using (var image = new MagickImage(stream)) - { - image.Resize(300, 300); - using (var stream2 = new MemoryStream()) - { - return new Bitmap(stream2); - } - } - } - } - } -} |
