Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using ImageProcessor;
- using ImageProcessor.Interfaces;
- using System;
- using System.Threading.Tasks;
- using Windows.Storage;
- using Windows.UI.Xaml.Media;
- namespace ImageProcessorTDD
- {
- public class FilteredImageProvider : IDisposable
- {
- public event Action ImageSourceChangedEvent;
- GPUImage currentImage;
- SharpDXRenderer renderer;
- FilterContainer filterContainer;
- ImageGPULoaderFactory loaderFactory;
- public FilteredImageProvider()
- {
- this.renderer = new SharpDXRenderer();
- this.filterContainer = new FilterContainer();
- this.loaderFactory = new ImageGPULoaderFactory();
- }
- public ImageSource Image
- {
- get { return renderer.GetRendererSource(); }
- }
- public async Task LoadFromFile(IStorageFile sourceFile)
- {
- var imageLoader = loaderFactory.GetImageLoader(sourceFile);
- if (currentImage != null)
- currentImage.Dispose();
- currentImage = await imageLoader.LoadImage();
- renderer.Load(currentImage);
- ImageSourceChangedEvent();
- }
- public async Task SaveToFile(IStorageFile destinyFile)
- {
- var imageSaver = loaderFactory.GetImageLoader(destinyFile);
- var deviceManager = renderer.GetDeviceManager();
- await imageSaver.SaveImage(currentImage, deviceManager);
- }
- public void Render()
- {
- var filterCompilator = new FilterCompilator();
- var renderedImage = currentImage.GetImageAsEffect();
- var compiledEffect = filterCompilator.CompileFiltersToEffect(renderedImage, filterContainer);
- renderer.Render(compiledEffect);
- }
- public void AddFilter(IFilter filter)
- {
- filterContainer.AddFilter(filter);
- }
- public void RemoveFilter(IFilter filter)
- {
- filterContainer.RemoveFilter(filter);
- }
- public void Undo()
- {
- filterContainer.Undo();
- }
- public void Redo()
- {
- filterContainer.Redo();
- }
- public void Dispose()
- {
- if (currentImage != null)
- currentImage.Dispose();
- renderer.Dispose();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement