private async void Button_Click(object sender, RoutedEventArgs e)
        {
            FileOpenPicker fo = new FileOpenPicker();

            fo.FileTypeFilter.Add(".png");
            fo.FileTypeFilter.Add(".jpg");
            fo.SuggestedStartLocation = PickerLocationId.Desktop;

            var file = await fo.PickSingleFileAsync();

            if (file != null)
            {
                Cropper.Reset();
                Canvas.Reset();
                await Cropper.SetSourceAsync(file);

                Canvas.SetFile(file);

                Canvas.SetSource(Cropper._software);
                Canvas.SetRect(Cropper.CropRectangle);
                //if (!_hasMessageContext) //TODO: Fix mask bug, remove hack (#2017 references mask position)
                //{
                //    await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle);
                //    Cropper.SetProportions(_media.EditState.Proportions);
                //}
                //Cropper.IsCropEnabled = true;
            }
        }
        private async void Rotate_Click(object sender, RoutedEventArgs e)
        {
            var rotation = BitmapRotation.None;

            var proportions = RotateProportions(Cropper.Proportions);
            var rectangle   = RotateArea(Cropper.CropRectangle);

            switch (_rotation)
            {
            case BitmapRotation.None:
                rotation = BitmapRotation.Clockwise90Degrees;
                break;

            case BitmapRotation.Clockwise90Degrees:
                rotation = BitmapRotation.Clockwise180Degrees;
                break;

            case BitmapRotation.Clockwise180Degrees:
                rotation = BitmapRotation.Clockwise270Degrees;
                break;
            }

            _rotation = rotation;
            await Cropper.SetSourceAsync(_file, rotation, _flip, proportions, rectangle);

            Rotate.IsChecked = _rotation != BitmapRotation.None;
            Canvas.Invalidate();
        }
        private async void Cancel_Click(object sender, RoutedEventArgs e)
        {
            if (CropToolbar != null && CropToolbar.Visibility == Visibility.Visible)
            {
                // Reset Cropper
                await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle);

                _rotation      = _media.EditState.Rotation;
                _flip          = _media.EditState.Flip;
                Crop.IsChecked = IsCropped(Cropper.CropRectangle);
                ResetUiVisibility();
            }
            else if (DrawToolbar != null && DrawToolbar.Visibility == Visibility.Visible)
            {
                Canvas.RestoreState();

                ResetUiVisibility();
                SettingsService.Current.Pencil = DrawSlider.GetDefault();
            }
            else
            {
                if (_media is StorageMedia)
                {
                    _media.EditState = _originalMediaEditState; // Reset to state before starting editing
                }
                if (_media is StorageVideo video)
                {
                    video.IsMuted     = _originalVideoIsMuted;
                    video.Compression = _originalVideoCompression;
                }
                ResetUiVisibility();
                Hide(ContentDialogResult.Secondary);
            }
        }
Example #4
0
        private async void AccepscdtButton_Click(object sender, RoutedEventArgs e)
        {
            FileOpenPicker fo = new FileOpenPicker();

            fo.FileTypeFilter.Add(".png");
            fo.FileTypeFilter.Add(".jpg");
            fo.SuggestedStartLocation = PickerLocationId.Desktop;

            var file = await fo.PickSingleFileAsync();

            if (file != null)
            {
                ResetUI();
                Cropper.Reset();
                Canvas.Reset();
                await Cropper.SetSourceAsync(file);

                Canvas.SetFile(file);

                Canvas.SetSource(Cropper._software);
                Canvas.SetRect(Cropper.CropRectangle);

                DisbaleCloseButton();
                CropMode(true, false);
            }
        }
Example #5
0
        public EditYourPhotoView(StorageFile file)
        {
            InitializeComponent();

            //_inkPresenter = Canvas.InkPresenter;
            //_inkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Pen | CoreInputDeviceTypes.Touch;

            Loaded += async(s, args) =>
            {
                await Cropper.SetSourceAsync(file);
            };
        }
Example #6
0
        public EditMediaPopup(StorageMedia media, ImageCropperMask mask = ImageCropperMask.Rectangle)
        {
            InitializeComponent();

            Canvas.Strokes = media.EditState.Strokes;

            Cropper.SetMask(mask);
            Cropper.SetProportions(mask == ImageCropperMask.Ellipse ? BitmapProportions.Square : media.EditState.Proportions);

            if (mask == ImageCropperMask.Ellipse)
            {
                Proportions.IsChecked = true;
                Proportions.IsEnabled = false;
            }

            _file  = media.File;
            _media = media;

            Loaded += async(s, args) =>
            {
                if (mask == ImageCropperMask.Ellipse)
                {
                    await Cropper.SetSourceAsync(media.File, proportions : BitmapProportions.Square);
                }
                else
                {
                    await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle);
                }
            };
            Unloaded += (s, args) =>
            {
                Media.Source = null;
            };

            if (mask == ImageCropperMask.Ellipse && string.Equals(media.File.FileType, ".mp4", StringComparison.OrdinalIgnoreCase))
            {
                FindName(nameof(TrimToolbar));
                TrimToolbar.Visibility  = Visibility.Visible;
                BasicToolbar.Visibility = Visibility.Collapsed;

                InitializeVideo(media.File);
            }
        }
        public EditMediaPopup(StorageFile file, BitmapProportions proportions = BitmapProportions.Custom, ImageCropperMask mask = ImageCropperMask.Rectangle)
        {
            InitializeComponent();

            Cropper.SetMask(mask);
            Cropper.SetProportions(proportions);

            if (proportions != BitmapProportions.Custom)
            {
                Proportions.IsChecked = true;
                Proportions.IsEnabled = false;
            }

            _file = file;

            Loaded += async(s, args) =>
            {
                await Cropper.SetSourceAsync(file, proportions : proportions);
            };
        }
        public EditMediaPopup(StorageMedia media)
        {
            InitializeComponent();

            Canvas.Strokes = media.EditState.Strokes;

            Cropper.SetMask(ImageCropperMask.Rectangle);
            Cropper.SetProportions(media.EditState.Proportions);

            if (media.EditState.Proportions != BitmapProportions.Custom)
            {
                Proportions.IsChecked = true;
                Proportions.IsEnabled = true;
            }

            _file  = media.File;
            _media = media;

            Loaded += async(s, args) =>
            {
                await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle);
            };
        }
        private async void Flip_Click(object sender, RoutedEventArgs e)
        {
            var flip     = _flip;
            var rotation = _rotation;

            var proportions = Cropper.Proportions;
            var rectangle   = FlipArea(Cropper.CropRectangle);

            switch (rotation)
            {
            case BitmapRotation.Clockwise90Degrees:
            case BitmapRotation.Clockwise270Degrees:
                switch (flip)
                {
                case BitmapFlip.None:
                    flip = BitmapFlip.Vertical;
                    break;

                case BitmapFlip.Vertical:
                    flip = BitmapFlip.None;
                    break;

                case BitmapFlip.Horizontal:
                    flip     = BitmapFlip.None;
                    rotation = rotation == BitmapRotation.Clockwise90Degrees
                                ? BitmapRotation.Clockwise270Degrees
                                : BitmapRotation.Clockwise90Degrees;
                    break;
                }
                break;

            case BitmapRotation.None:
            case BitmapRotation.Clockwise180Degrees:
                switch (flip)
                {
                case BitmapFlip.None:
                    flip = BitmapFlip.Horizontal;
                    break;

                case BitmapFlip.Horizontal:
                    flip = BitmapFlip.None;
                    break;

                case BitmapFlip.Vertical:
                    flip     = BitmapFlip.None;
                    rotation = rotation == BitmapRotation.None
                                ? BitmapRotation.Clockwise180Degrees
                                : BitmapRotation.None;
                    break;
                }
                break;
            }

            _flip     = flip;
            _rotation = rotation;
            await Cropper.SetSourceAsync(_file, _rotation, flip, proportions, rectangle);

            //Transform.ScaleX = _flip == BitmapFlip.Horizontal ? -1 : 1;
            //Transform.ScaleY = _flip == BitmapFlip.Vertical ? -1 : 1;

            Flip.IsChecked = _flip != BitmapFlip.None;
            Canvas.Invalidate();
        }
        public EditMediaPopup(StorageMedia media, ImageCropperMask mask = ImageCropperMask.Rectangle, bool ttl = false)
        {
            InitializeComponent();

            Canvas.Strokes = media.EditState.Strokes;
            Cropper.SetMask(mask);
            if (mask == ImageCropperMask.Ellipse)
            {
                _hasMessageContext          = false;
                media.EditState.Proportions = BitmapProportions.Square;
            }
            Cropper.SetProportions(media.EditState.Proportions);

            _file  = media.File;
            _media = media;
            _originalMediaEditState = CopyBitmapEditState(media.EditState);

            Loaded += async(s, args) =>
            {
                await Cropper.SetSourceAsync(media.File, media.EditState.Rotation, media.EditState.Flip, media.EditState.Proportions, media.EditState.Rectangle);

                if (!_hasMessageContext) //TODO: Fix mask bug, remove hack (#2017 references mask position)
                {
                    await Cropper.SetSourceAsync(_media.File, _media.EditState.Rotation, _media.EditState.Flip, _media.EditState.Proportions, _media.EditState.Rectangle);

                    Cropper.SetProportions(_media.EditState.Proportions);
                }
                Cropper.IsCropEnabled = !_hasMessageContext && _media.IsVideo;
            };
            Unloaded += (s, args) =>
            {
                Media.Source = null;
            };

            #region Init UI
            if (mask == ImageCropperMask.Ellipse && string.Equals(media.File.FileType, ".mp4", StringComparison.OrdinalIgnoreCase))
            {
                FindName(nameof(TrimToolbar));
                TrimToolbar.Visibility    = Visibility.Visible;
                BasicToolbar.Visibility   = Visibility.Collapsed;
                SeparatorLeft.Visibility  = Visibility.Collapsed;
                SeparatorRight.Visibility = Visibility.Collapsed;

                InitializeVideo(media.File);
            }

            if (_media is StorageVideo video)
            {
                _originalVideoCompression = video.Compression;
                _originalVideoIsMuted     = video.IsMuted;
                Mute.IsChecked            = video.IsMuted;
                Mute.Visibility           = Visibility.Visible;
                Compress.IsChecked        = video.Compression != video.MaxCompression;
                Compress.Visibility       = video.CanCompress ? Visibility.Visible : Visibility.Collapsed;

                if (video.CanCompress)
                {
                    Compress.Glyph        = new CompressionToGlyphConverter().Convert(video.Compression, typeof(string), null, video.MaxCompression.ToString()).ToString();
                    Compress.CheckedGlyph = Compress.Glyph;
                    Compress.IsChecked    = video.Compression != video.MaxCompression;
                }
            }
            else
            {
                Mute.Visibility     = Visibility.Collapsed;
                Compress.Visibility = Visibility.Collapsed;
            }

            Crop.Visibility = _media is StoragePhoto ? Visibility.Visible : Visibility.Collapsed;
            Draw.Visibility = Crop.Visibility;
            Ttl.Visibility  = ttl ? Visibility.Visible : Visibility.Collapsed;
            Ttl.IsChecked   = _media.Ttl > 0;

            if (_media.EditState is BitmapEditState editSate)
            {
                Crop.IsChecked = editSate.Proportions != BitmapProportions.Custom ||
                                 editSate.Flip != BitmapFlip.None ||
                                 editSate.Rotation != BitmapRotation.None ||
                                 (!editSate.Rectangle.IsEmpty &&
                                  (editSate.Rectangle.X > 0 || editSate.Rectangle.Y > 0 ||
                                   Math.Abs(editSate.Rectangle.Width - 1) > 0.1f || Math.Abs(editSate.Rectangle.Height - 1) > 0.1f));

                Draw.IsChecked = editSate.Strokes != null && editSate.Strokes.Count > 0;
            }
            else
            {
                Crop.IsChecked = false;
                Draw.IsChecked = false;
            }

            if (_hasMessageContext)
            {
                if (!string.IsNullOrWhiteSpace(media.Caption?.Text))
                {
                    CaptionInput.SetText(media.Caption);
                }
            }
            else
            {
                CaptionInput.Visibility = Visibility.Collapsed;
            }
            #endregion
        }