Example #1
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);
            };
        }
        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
        }
 public MainPage()
 {
     this.InitializeComponent();
     Cropper.SetMask(ImageCropperMask.Rectangle);
     Loaded += MainPage_Loaded;
 }