private double GetProportionsFactor(BitmapProportions proportions, double defaultValue)
        {
            switch (proportions)
            {
            case BitmapProportions.AspectRatio:
                return(UsedAspectRatio);

            case BitmapProportions.Original:
                return(m_imageSize.Width / m_imageSize.Height);

            case BitmapProportions.Square:
                return(1.0);

            // Portrait
            case BitmapProportions.TwoOverThree:
                return(2.0 / 3.0);

            case BitmapProportions.ThreeOverFive:
                return(3.0 / 5.0);

            case BitmapProportions.ThreeOverFour:
                return(3.0 / 4.0);

            case BitmapProportions.FourOverFive:
                return(4.0 / 5.0);

            case BitmapProportions.FiveOverSeven:
                return(5.0 / 7.0);

            case BitmapProportions.NineOverSixteen:
                return(9.0 / 16.0);

            // Landscape
            case BitmapProportions.ThreeOverTwo:
                return(3.0 / 2.0);

            case BitmapProportions.FiveOverThree:
                return(5.0 / 3.0);

            case BitmapProportions.FourOverThree:
                return(4.0 / 3.0);

            case BitmapProportions.FiveOverFour:
                return(5.0 / 4.0);

            case BitmapProportions.SevenOverFive:
                return(7.0 / 5.0);

            case BitmapProportions.SixteenOverNine:
                return(16.0 / 9.0);

            default:
                return(defaultValue);
            }
        }
예제 #2
0
        public static string Convert(BitmapProportions proportions)
        {
            switch (proportions)
            {
            case BitmapProportions.Custom:
                return("Custom");

            case BitmapProportions.Original:
                return(Strings.Resources.CropOriginal);

            case BitmapProportions.Square:
                return(Strings.Resources.CropSquare);

            // Portrait
            case BitmapProportions.TwoOverThree:
                return("2:3");

            case BitmapProportions.ThreeOverFive:
                return("3:5");

            case BitmapProportions.ThreeOverFour:
                return("3:4");

            case BitmapProportions.FourOverFive:
                return("4:5");

            case BitmapProportions.FiveOverSeven:
                return("5:7");

            case BitmapProportions.NineOverSixteen:
                return("9:16");

            // Landscape
            case BitmapProportions.ThreeOverTwo:
                return("3:2");

            case BitmapProportions.FiveOverThree:
                return("5:3");

            case BitmapProportions.FourOverThree:
                return("4:3");

            case BitmapProportions.FiveOverFour:
                return("5:4");

            case BitmapProportions.SevenOverFive:
                return("7:5");

            case BitmapProportions.SixteenOverNine:
                return("16:9");

            default:
                return(proportions.ToString());
            }
        }
예제 #3
0
        private BitmapProportions RotateProportions(BitmapProportions proportions)
        {
            switch (proportions)
            {
            case BitmapProportions.Original:
            case BitmapProportions.Square:
            default:
                return(proportions);

            // Portrait
            case BitmapProportions.TwoOverThree:
                return(BitmapProportions.ThreeOverTwo);

            case BitmapProportions.ThreeOverFive:
                return(BitmapProportions.FiveOverThree);

            case BitmapProportions.ThreeOverFour:
                return(BitmapProportions.FourOverThree);

            case BitmapProportions.FourOverFive:
                return(BitmapProportions.FiveOverFour);

            case BitmapProportions.FiveOverSeven:
                return(BitmapProportions.SevenOverFive);

            case BitmapProportions.NineOverSixteen:
                return(BitmapProportions.SixteenOverNine);

            // Landscape
            case BitmapProportions.ThreeOverTwo:
                return(BitmapProportions.TwoOverThree);

            case BitmapProportions.FiveOverThree:
                return(BitmapProportions.ThreeOverFive);

            case BitmapProportions.FourOverThree:
                return(BitmapProportions.ThreeOverFour);

            case BitmapProportions.FiveOverFour:
                return(BitmapProportions.FourOverFive);

            case BitmapProportions.SevenOverFive:
                return(BitmapProportions.FiveOverSeven);

            case BitmapProportions.SixteenOverNine:
                return(BitmapProportions.NineOverSixteen);
            }
        }
예제 #4
0
        public void SetProportions(BitmapProportions value, bool animate = true)
        {
            _proportions = value;

            var cropScale             = m_rectangle.Width * m_imageSize.Width / (m_rectangle.Height * m_imageSize.Height);
            var proportionalCropScale = GetProportionsFactor(value, cropScale);

            if (cropScale < proportionalCropScale)
            {
                var cropWidth = m_rectangle.Height * m_imageSize.Height * proportionalCropScale / m_imageSize.Width;
                if (cropWidth > 1)
                {
                    var cropHeight = m_rectangle.Width * m_imageSize.Width / proportionalCropScale / m_imageSize.Height;

                    m_rectangle.Y      = Math.Clamp(m_rectangle.Y + (m_rectangle.Height - cropHeight) / 2.0, 0.0, m_imageSize.Height - cropHeight);
                    m_rectangle.Height = cropHeight;
                }
                else
                {
                    m_rectangle.X     = Math.Clamp(m_rectangle.X + (m_rectangle.Width - cropWidth) / 2.0, 0.0, m_imageSize.Width - cropWidth);
                    m_rectangle.Width = cropWidth;
                }
            }
            else
            {
                var cropHeight = m_rectangle.Width * m_imageSize.Width / proportionalCropScale / m_imageSize.Height;
                if (cropHeight > 1)
                {
                    var cropWidth = m_rectangle.Height * m_imageSize.Height * proportionalCropScale / m_imageSize.Width;

                    m_rectangle.X     = Math.Clamp(m_rectangle.X + (m_rectangle.Width - cropWidth) / 2.0, 0.0, m_imageSize.Width - cropWidth);
                    m_rectangle.Width = cropWidth;
                }
                else
                {
                    m_rectangle.Y      = Math.Clamp(m_rectangle.Y + (m_rectangle.Height - cropHeight) / 2.0, 0.0, m_imageSize.Height - cropHeight);
                    m_rectangle.Height = cropHeight;
                }
            }

            SetRectangle(m_rectangle, animate);
        }
        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 void SetProportions(BitmapProportions value, bool animate = true)
        {
            _proportions = value;

            var cropScale             = (m_rectangle.Width * m_imageSize.Width) / (m_rectangle.Height * m_imageSize.Height);
            var proportionalCropScale = GetProportionsFactor(value, cropScale);

            if (cropScale < proportionalCropScale)
            {
                var cropHeight = ((m_rectangle.Width * m_imageSize.Width) / proportionalCropScale) / m_imageSize.Height;

                m_rectangle.Y      = Clamp(m_rectangle.Y + (m_rectangle.Height - cropHeight) / 2.0, 0.0, m_imageSize.Height - cropHeight);
                m_rectangle.Height = cropHeight;
            }
            else
            {
                var cropWidth = ((m_rectangle.Height * m_imageSize.Height) * proportionalCropScale) / m_imageSize.Width;

                m_rectangle.X     = Clamp(m_rectangle.X + (m_rectangle.Width - cropWidth) / 2.0, 0.0, m_imageSize.Width - cropWidth);
                m_rectangle.Width = cropWidth;
            }

            UpdateTutteCose(m_rectangle, animate);
        }