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); } }
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()); } }
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); } }
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); }