public static UILabel AddLabel(UIView view, string text, UIColor color, ResizeAlignment alignment, UIEdgeInsets margins) { var label = new UILabel { Text = text, TextColor = color }; return(AddLabel(view, label, alignment, margins)); }
public static UIImage ResizeAndDispose( this UIImage image, CGSize requestedSize, ResizeMethod resizeStrategy = ResizeMethod.Stretch, ResizeAlignment resizeAlignment = ResizeAlignment.CenterCenter, bool antiAliasing = true, CGInterpolationQuality interpolationQuality = CGInterpolationQuality.High, UIColor paddingColor = null) { return(Tools.iOSTool.ResizeAndDispose(image, requestedSize, resizeStrategy, resizeAlignment, antiAliasing, interpolationQuality, paddingColor)); }
public static Bitmap ResizeAndDispose( this Image image, Size requestedSize, ResizeMethod resizeMethod = ResizeMethod.Stretch, ResizeAlignment resizeAlignment = ResizeAlignment.CenterCenter, InterpolationMode interpolationMode = InterpolationMode.HighQualityBicubic, Color?paddingColor = null, PixelFormat?newPixelFormat = null ) { using (var sourceImage = image) { return(sourceImage.Resize(requestedSize, resizeMethod, resizeAlignment, interpolationMode, paddingColor, newPixelFormat)); } }
public static Bitmap FocusZoom(this Image image, float zoomFactor, int focusX, int focusY, ResizeMethod resizeMethod = ResizeMethod.Stretch, ResizeAlignment resizeAlignment = ResizeAlignment.CenterCenter, InterpolationMode interpolationMode = InterpolationMode.HighQualityBicubic, Color?paddingColor = null, PixelFormat?newPixelFormat = null ) { if (Math.Abs(zoomFactor - 0.0f) < Tools.Maths.EPSILON_F) { throw new ArgumentOutOfRangeException("zoomFactor", string.Format("Must not be 0 (epsilon tested with {0})", Tools.Maths.EPSILON_F)); } var actualPaddingColor = paddingColor.GetValueOrDefault(Color.Transparent); var pixelFormat = newPixelFormat.GetValueOrDefault(image.PixelFormat); var bitmap = new Bitmap(image.Width, image.Height, pixelFormat); bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.Clear(actualPaddingColor); graphics.InterpolationMode = interpolationMode; var sourceHeight = image.Height / zoomFactor; var sourceWidth = image.Width / zoomFactor; var startX = focusX - sourceWidth / 2; var startY = focusY - sourceHeight / 2; var sourceRectangle = new Rectangle( (int)Math.Round(startX), (int)Math.Round(startY), (int)Math.Round(sourceWidth), (int)Math.Round(sourceHeight) ) .IntersectWith(0, 0, image.Width, image.Height); var destRectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height); graphics.DrawImage(image, sourceRectangle, destRectangle, GraphicsUnit.Pixel); } return(bitmap); }
public static UIImage Resize( UIImage sourceImage, CGSize requestedSize, ResizeMethod resizeMethod = ResizeMethod.Stretch, ResizeAlignment resizeAlignment = ResizeAlignment.CenterCenter, bool antiAliasing = true, CGInterpolationQuality interpolationQuality = CGInterpolationQuality.High, UIColor paddingColor = null) { if (paddingColor == null) { paddingColor = UIColor.Clear; } var sourceImageSize = (CGSize)sourceImage.Size; var scaleWidth = ((float)requestedSize.Width / (float)sourceImageSize.Width); var scaleHeight = ((float)requestedSize.Height / (float)sourceImageSize.Height); CGSize destImageSize; CGRect sourceBlitRect = CGRect.Empty; CGRect destBlitRect = CGRect.Empty; bool alignSourceBlitRect = false; bool alignDestBlitRect = false; switch (resizeMethod) { case ResizeMethod.AspectFit: sourceBlitRect = new CGRect(CGPoint.Empty, sourceImageSize); scaleWidth = Math.Min(scaleWidth, scaleHeight); scaleHeight = Math.Min(scaleWidth, scaleHeight); destBlitRect.Width = sourceImageSize.Width * scaleWidth; destBlitRect.Height = sourceImageSize.Height * scaleHeight; destImageSize = destBlitRect.Size; break; case ResizeMethod.AspectFitPadded: sourceBlitRect = new CGRect(CGPoint.Empty, sourceImageSize); scaleWidth = Math.Min(scaleWidth, scaleHeight); scaleHeight = Math.Min(scaleWidth, scaleHeight); destBlitRect.Width = sourceImageSize.Width * scaleWidth; destBlitRect.Height = sourceImageSize.Height * scaleHeight; destImageSize = requestedSize; alignDestBlitRect = true; break; case ResizeMethod.AspectFill: var sourceAspect = sourceImageSize.Width / sourceImageSize.Height; var destAspect = requestedSize.Width / requestedSize.Height; if (destAspect > sourceAspect) { sourceBlitRect = new CGRect(0, 0, sourceImageSize.Width, sourceImageSize.Width / destAspect); alignSourceBlitRect = true; } else if (destAspect < sourceAspect) { sourceBlitRect = new CGRect(0, 0, sourceImageSize.Height * destAspect, sourceImageSize.Height); alignSourceBlitRect = true; } else { sourceBlitRect = new CGRect(CGPoint.Empty, sourceImageSize); } destBlitRect = new CGRect(CGPoint.Empty, requestedSize); destImageSize = requestedSize; break; case ResizeMethod.Stretch: default: sourceBlitRect = new CGRect(CGPoint.Empty, sourceImageSize); destBlitRect.Width = sourceImageSize.Width * scaleWidth; destBlitRect.Height = sourceImageSize.Height * scaleHeight; destImageSize = requestedSize; break; } if (alignDestBlitRect) { switch (resizeAlignment) { case ResizeAlignment.TopLeft: destBlitRect.Offset(0, 0); break; case ResizeAlignment.TopCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, 0); break; case ResizeAlignment.TopRight: destBlitRect.Offset(destImageSize.Width - destBlitRect.Width, 0); break; case ResizeAlignment.CenterLeft: destBlitRect.Offset(0, (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.CenterCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.CenterRight: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width), (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.BottomLeft: destBlitRect.Offset(0, (destImageSize.Height - destBlitRect.Height)); break; case ResizeAlignment.BottomCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, destImageSize.Height - destBlitRect.Height); break; case ResizeAlignment.BottomRight: destBlitRect.Offset(destImageSize.Width - destBlitRect.Width, destImageSize.Height - destBlitRect.Height); break; default: break; } } if (alignSourceBlitRect) { switch (resizeAlignment) { case ResizeAlignment.TopLeft: sourceBlitRect.Offset(0, 0); break; case ResizeAlignment.TopCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, 0); break; case ResizeAlignment.TopRight: sourceBlitRect.Offset(sourceImageSize.Width - sourceBlitRect.Width, 0); break; case ResizeAlignment.CenterLeft: sourceBlitRect.Offset(0, (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.CenterCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.CenterRight: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width), (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.BottomLeft: sourceBlitRect.Offset(0, sourceImageSize.Height - sourceBlitRect.Height); break; case ResizeAlignment.BottomCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, sourceImageSize.Height - sourceBlitRect.Height); break; case ResizeAlignment.BottomRight: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width), sourceImageSize.Height - sourceBlitRect.Height); break; default: break; } } var imageToUse = alignSourceBlitRect ? Crop(sourceImage, sourceBlitRect) : sourceImage; UIGraphics.BeginImageContext(destImageSize); var context = UIGraphics.GetCurrentContext(); //context.TranslateCTM(0, destImageSize.Height); //context.ScaleCTM(1f, -1f); context.InterpolationQuality = interpolationQuality; context.SetAllowsAntialiasing(antiAliasing); context.SetFillColor(paddingColor.CGColor); context.FillRect(new CGRect(CGPoint.Empty, destImageSize)); //context.DrawImage(destBlitRect, imageToUse.CGImage); imageToUse.Draw(destBlitRect); UIImage resizedImage = UIGraphics.GetImageFromCurrentImageContext(); UIGraphics.EndImageContext(); if (imageToUse != sourceImage) { imageToUse.Dispose(); } return(resizedImage); }
public static UILabel AddLabel(UIView view, UILabel label, ResizeAlignment alignment, UIEdgeInsets margins) { label.SizeToFit(); label.TranslatesAutoresizingMaskIntoConstraints = false; //label.AdjustsFontSizeToFitWidth = true; view.AddSubview(label); view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Left, NSLayoutRelation.Equal, view, NSLayoutAttribute.Left, 1f, margins.Left)), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Right, NSLayoutRelation.Equal, view, NSLayoutAttribute.Right, 1f, margins.Right)), }); switch (alignment) { case ResizeAlignment.TopLeft: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, margins.Top)), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, +label.Frame.Height + margins.Top)), }); label.TextAlignment = UITextAlignment.Left; break; case ResizeAlignment.TopCenter: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, margins.Top)), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, +label.Frame.Height + margins.Top)), }); label.TextAlignment = UITextAlignment.Center; break; case ResizeAlignment.TopRight: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, margins.Top)), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Top, 1f, +label.Frame.Height + margins.Top)), }); label.TextAlignment = UITextAlignment.Right; break; case ResizeAlignment.CenterLeft: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, view, NSLayoutAttribute.CenterY, 1f, 0f)), }); label.TextAlignment = UITextAlignment.Left; break; case ResizeAlignment.CenterCenter: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, view, NSLayoutAttribute.CenterY, 1f, 0f)), }); label.TextAlignment = UITextAlignment.Center; break; case ResizeAlignment.CenterRight: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, view, NSLayoutAttribute.CenterY, 1f, 0f)), }); label.TextAlignment = UITextAlignment.Right; break; case ResizeAlignment.BottomLeft: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, -(label.Frame.Height + margins.Bottom))), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, margins.Bottom)), }); label.TextAlignment = UITextAlignment.Left; break; case ResizeAlignment.BottomCenter: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, -(label.Frame.Height + margins.Bottom))), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, margins.Bottom)), }); label.TextAlignment = UITextAlignment.Left; break; case ResizeAlignment.BottomRight: view.AddConstraints(new[] { (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Top, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, -(label.Frame.Height + margins.Bottom))), (NSLayoutConstraint)(NSLayoutConstraint.Create(label, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, view, NSLayoutAttribute.Bottom, 1f, margins.Bottom)), }); label.TextAlignment = UITextAlignment.Left; break; } return(label); }
public static Bitmap Resize( this Image image, Size requestedSize, ResizeMethod resizeMethod = ResizeMethod.Stretch, ResizeAlignment resizeAlignment = ResizeAlignment.CenterCenter, InterpolationMode interpolationMode = InterpolationMode.HighQualityBicubic, Color?paddingColor = null, PixelFormat?newPixelFormat = null ) { var actualPaddingColor = paddingColor.GetValueOrDefault(Color.Transparent); var pixelFormat = newPixelFormat.GetValueOrDefault(image.PixelFormat); var sourceImageSize = image.Size; var scaleWidth = (requestedSize.Width / (float)sourceImageSize.Width); var scaleHeight = (requestedSize.Height / (float)sourceImageSize.Height); Size destImageSize; var sourceBlitRect = Rectangle.Empty; var destBlitRect = Rectangle.Empty; var alignSourceBlitRect = false; var alignDestBlitRect = false; switch (resizeMethod) { case ResizeMethod.AspectFit: sourceBlitRect = new Rectangle(Point.Empty, sourceImageSize); scaleWidth = Math.Min(scaleWidth, scaleHeight); scaleHeight = Math.Min(scaleWidth, scaleHeight); destBlitRect.Width = (int)Math.Round(sourceImageSize.Width * scaleWidth, 0); destBlitRect.Height = (int)Math.Round(sourceImageSize.Height * scaleHeight, 0); destImageSize = destBlitRect.Size; break; case ResizeMethod.AspectFitPadded: sourceBlitRect = new Rectangle(Point.Empty, sourceImageSize); scaleWidth = Math.Min(scaleWidth, scaleHeight); scaleHeight = Math.Min(scaleWidth, scaleHeight); destBlitRect.Width = (int)Math.Round(sourceImageSize.Width * scaleWidth); destBlitRect.Height = (int)Math.Round(sourceImageSize.Height * scaleHeight); destImageSize = requestedSize; alignDestBlitRect = true; break; case ResizeMethod.AspectFill: var sourceAspect = sourceImageSize.Width / (float)sourceImageSize.Height; var destAspect = requestedSize.Width / (float)requestedSize.Height; if (destAspect > sourceAspect) { sourceBlitRect = new Rectangle(0, 0, sourceImageSize.Width, (int)Math.Round(sourceImageSize.Width / destAspect)); alignSourceBlitRect = true; } else if (destAspect < sourceAspect) { sourceBlitRect = new Rectangle(0, 0, (int)Math.Round(sourceImageSize.Height * destAspect), sourceImageSize.Height); alignSourceBlitRect = true; } else { sourceBlitRect = new Rectangle(Point.Empty, sourceImageSize); } destBlitRect = new Rectangle(Point.Empty, requestedSize); destImageSize = requestedSize; break; case ResizeMethod.Stretch: default: sourceBlitRect = new Rectangle(Point.Empty, sourceImageSize); destBlitRect.Width = (int)Math.Round(sourceImageSize.Width * scaleWidth); destBlitRect.Height = (int)Math.Round(sourceImageSize.Height * scaleHeight); destImageSize = requestedSize; break; } if (alignDestBlitRect) { switch (resizeAlignment) { case ResizeAlignment.TopLeft: destBlitRect.Offset(0, 0); break; case ResizeAlignment.TopCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, 0); break; case ResizeAlignment.TopRight: destBlitRect.Offset(destImageSize.Width - destBlitRect.Width, 0); break; case ResizeAlignment.CenterLeft: destBlitRect.Offset(0, (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.CenterCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.CenterRight: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width), (destImageSize.Height - destBlitRect.Height) / 2); break; case ResizeAlignment.BottomLeft: destBlitRect.Offset(0, (destImageSize.Height - destBlitRect.Height)); break; case ResizeAlignment.BottomCenter: destBlitRect.Offset((destImageSize.Width - destBlitRect.Width) / 2, destImageSize.Height - destBlitRect.Height); break; case ResizeAlignment.BottomRight: destBlitRect.Offset(destImageSize.Width - destBlitRect.Width, destImageSize.Height - destBlitRect.Height); break; default: break; } } if (alignSourceBlitRect) { switch (resizeAlignment) { case ResizeAlignment.TopLeft: sourceBlitRect.Offset(0, 0); break; case ResizeAlignment.TopCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, 0); break; case ResizeAlignment.TopRight: sourceBlitRect.Offset(sourceImageSize.Width - sourceBlitRect.Width, 0); break; case ResizeAlignment.CenterLeft: sourceBlitRect.Offset(0, (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.CenterCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.CenterRight: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width), (sourceImageSize.Height - sourceBlitRect.Height) / 2); break; case ResizeAlignment.BottomLeft: sourceBlitRect.Offset(0, sourceImageSize.Height - sourceBlitRect.Height); break; case ResizeAlignment.BottomCenter: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width) / 2, sourceImageSize.Height - sourceBlitRect.Height); break; case ResizeAlignment.BottomRight: sourceBlitRect.Offset((sourceImageSize.Width - sourceBlitRect.Width), sourceImageSize.Height - sourceBlitRect.Height); break; default: break; } } Bitmap bitmap; if (destImageSize.Width != 0 && destImageSize.Height != 0) { bitmap = new Bitmap(destImageSize.Width, destImageSize.Height, pixelFormat); bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (var graphics = Graphics.FromImage(bitmap)) { graphics.Clear(actualPaddingColor); graphics.InterpolationMode = interpolationMode; graphics.DrawImage( image, destBlitRect, sourceBlitRect, GraphicsUnit.Pixel ); } } else { bitmap = new Bitmap(1, 1); } return(bitmap); }