Cómo recortar la image tomada de UIImagePickerController tal como está en la pantalla

Cuando tomo fotos con UIImagePickerController, hay más imágenes de las que se veían en la pantalla … ¿Cómo puedo tomar fotos / recortarlas, para que sean exactamente las mismas que vi en la pantalla?

editar: agregaré código, para especificar mi problema:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType { UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; imagePickerController.sourceType = sourceType; imagePickerController.delegate = self; imagePickerController.showsCameraControls = NO; imagePickerController.allowsEditing = YES; if (sourceType == UIImagePickerControllerSourceTypeCamera) { [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil]; self.overlayView.frame = imagePickerController.cameraOverlayView.frame; imagePickerController.cameraOverlayView = self.overlayView; //self.overlayView = nil; self.overlayImage.image = self.imageView.image; self.overlayImage.alpha = 0.5; UISlider *slider=[[UISlider alloc]initWithFrame:CGRectMake(60, 80, 200, 30)]; [slider setMaximumValue:1.0]; [slider setMinimumValue:0.0]; [slider setValue:0.5]; [slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged]; if (self.working == TRUE) { [imagePickerController.cameraOverlayView addSubview:self.overlayImage]; [imagePickerController.cameraOverlayView addSubview:slider]; } } self.imagePickerController = imagePickerController; [self presentViewController:self.imagePickerController animated:YES completion:nil]; } 

didFinishPickingMediaWithInfo:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:YES completion:NULL]; //this works, image is displayed UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; //this doesn't work, image is nil UIImage *image = [info objecyForKey:UIImagePickerControllerEditedImage]; [self.imageView setImage:image]; self.working = TRUE; self.imagePickerController = nil; //[self dismissViewControllerAnimated:YES completion:NULL]; } 

¿Puedo usar UIImagePickerControllerEditedImage, cuando imagePickerController.showsCameraControls = NO; ?

Simplemente publicando esto como una respuesta, pero no estoy seguro de si el póster solicita la image editada.

Cuando toma una foto con el UIImagePickerController, el selector muestra solo una parte de la image que se captura realmente al tomar la foto, como se muestra en la siguiente image, donde las líneas negras son la pantalla del iPhone.

introduzca la descripción de la imagen aquí

La image que obtienes de la camera es la image de tamaño completo, pero en la pantalla es solo el centro de la image, con el ancho o la altura de la image al máximo para el tamaño de la pantalla.

Todo lo que necesita hacer es get el centro de la image como se muestra arriba y tiene la image exacta que tenía en su pantalla.

Puede get la image original o recortada según la key del dictionary de información.

The pickedImageEdited sería la image recortada que está buscando y pickedImageOriginal sería la image original completa.

 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *pickedImageOriginal = [info objectForKey:UIImagePickerControllerOriginalImage]; UIImage *pickedImageEdited = [info objectForKey:UIImagePickerControllerEditedImage]; //do your stuff [self dismissViewControllerAnimated:YES completion:nil]; } 

Después de la respuesta de Wim, pude encontrar una solución como esta:

 UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; UIGraphicsBeginImageContext(CGSizeMake(720, 960)); [image drawInRect: CGRectMake(0, 0, 720, 960)]; UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CGRect cropRect = CGRectMake(40, 0, 640, 960); CGImageRef imageRef = CGImageCreateWithImageInRect([smallImage CGImage], cropRect); [self.imageView setImage:[UIImage imageWithCGImage:imageRef]]; 

Como puede ver, esto está hecho para la pantalla del iPhone de 3,5 pulgadas, y parece que funciona, pero el código depende del dispositivo o ¿hay alguna solución mejor?