You can use UIImagePickerController to do that.
First make a overlay view like the one shown in your question.
- I'm sure you can get the grey effect with Alpha property of view.
- you can make the line using UIBezierPath
when you are done with the overlay view then assign it to CameraOverlayView property of UIImagePickerController
Here is the rough example of that.
imagePicker = new UIImagePickerController();
// set our source to the camera
imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;
// set
imagePicker.MediaTypes = new string[] { "public.image" };
// show the camera controls
imagePicker.ShowsCameraControls = true;
// This is where you assign the view that you want to overlay
imagePicker.CameraOverlayView = new CameraOverlayView();
Update:
Use CGImageCreateWithImageInRect
class to get the cropped version of image. Pass camera overlay's rect and image reference of picture taken by camera and this class will return the cropped image that camera overlay covers.
Here is an example from Objective C and I'm sure you can do something similar in Xamarin.iOS
CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);
// or use the UIImage wherever you like
[UIImageView setImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…