public override void DidCropToImage (TOCropViewController cropViewController, UIImage image, CoreGraphics.CGRect cropRect, nint angle)
		{
			DidCrop = true;

			try 
			{
				if (image != null)
					App.CroppedImage = image.AsPNG().ToArray();

			}
			catch (Exception ex) {
				Debug.WriteLine (ex.Message);
			}
			finally
			{
				if (image != null) {
					image.Dispose ();
					image = null;
				}
			}

			parent.DismissViewController (true, App.PopModal);
		}
예제 #2
0
		/// <summary>
		/// Resize the image in byte array originalImageData to reqWidth and reqHeight.
		/// </summary>
		/// <remarks>If one of width or height is 0, the image is resized preserving the ratio.</remarks>
		/// <param name="originalImageData">Original image as byte array.</param>
		/// <param name="reqWidth">Req width.</param>
		/// <param name="reqHeight">Req height.</param>
		public byte[] Resize(byte[] originalImageData, int reqWidth, int reqHeight)
		{
			// Found at http://forums.xamarin.com/discussion/5697/resize-an-image-while-retaining-quality
			// and at http://bortolu.wordpress.com/2014/03/21/xamarin-c-how-to-convert-byte-array-to-uiimage-with-an-extension-method/

			if (originalImageData == null) 
			{
				return null;
			}

			UIImage image = null;

			try
			{
				image = new UIImage(NSData.FromArray(originalImageData));
			}
			catch (Exception)
			{
				return null;
			}

			UIGraphics.BeginImageContext(new CGSize(reqWidth, reqHeight));

			CGContext context = UIGraphics.GetCurrentContext();
			context.InterpolationQuality = CGInterpolationQuality.None;

			context.TranslateCTM(0, reqHeight);
			context.ScaleCTM(1f, -1f);

			context.DrawImage(new CGRect(0, 0, reqWidth, reqHeight), image.CGImage);

			image.Dispose();
			image = null;

			using (var scaledImage = UIGraphics.GetImageFromCurrentImageContext())
			{
				UIGraphics.EndImageContext();

				if (scaledImage == null)
				{
					return null;
				}

				NSData data = null;

				try
				{
					data = scaledImage.AsPNG();
					return data.ToArray();
				}
				catch (Exception)
				{
					return null;
				}
				finally
				{
					data.Dispose();
					data = null;
				}
			}
		}