2012-10-07 29 views
5

Estoy intentando implementar una vista de cámara de iOS que toma imágenes cuadradas (similar a Instagram). Mi código aparece a continuación. La primera parte, donde la altura del cuadro se establece para que sea igual al ancho del marco, está funcionando como se esperaba y se le da al usuario una vista que es cuadrada. El problema aparece más adelante cuando intento aplicar el marco (que es una propiedad CGRect) a los datos de imagen usando CGImageCreateWithImageInRect. Paso el marco recto a este método con la imagen. Pero los resultados no se recortan para ser cuadrados. En cambio, la imagen conserva las dimensiones predeterminadas originales de la cámara iOS. ¿Alguien puede decirme qué he hecho mal? Mi comprensión de la documentación de Apple es que CGImageCreateWithImageInRect debe seleccionar un área de imagen de forma Rect desde alguna coordenada x/y inicial. Pero eso no parece estar sucediendo.Recortar imagen usando CGImageCreateWithImageInRect

//Set the frame size to be square shaped 
UIView *view = imagePicker.view; 
     frame = view.frame; 
     frame.size.height = frame.size.width; 
     view.frame = frame; 

//Crop the image to the frame dimensions using CGImageCreateWithImageInRect 
-(void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [self.popoverController dismissPopoverAnimated:true]; 

NSString *mediaType = [info 
         objectForKey:UIImagePickerControllerMediaType]; 
[self dismissModalViewControllerAnimated:YES]; 
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { 
    UIImage *image = [info 
         objectForKey:UIImagePickerControllerOriginalImage]; 

    croppedImage = (__bridge UIImage *)(CGImageCreateWithImageInRect((__bridge CGImageRef)(image), frame)); 

    imageView.image = croppedImage; 

} 
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
{ 
    // Code here to support video if enabled 
} 
} 

Respuesta

0

Usted está haciendo lo correcto. Lo único es que creo que está configurando la propiedad de fotograma igual que la vista de selector, por lo que el tamaño final es el mismo que el original.

tratar de establecer el marco más pequeño que pickerView.view.frame, no igual

mira esto

Cropping an UIImage

+0

Probé pasando un CGRect arbitrariamente pequeño pero el resultado tiene 0 bytes de datos de imagen. Utilicé CGRect rect = CGRectMake (0, 26, 50, 50) ;. Además, mi código original establece que la altura del cuadro sea igual al ancho, por lo que es más pequeño que el tamaño original. Básicamente es un cuadrado de 320x320 basado en las dimensiones de la pantalla del iPhone. – hughesdan

+0

quizás esta respuesta puede ayudar http://stackoverflow.com/a/10185736/1447414 – user1447414

Cuestiones relacionadas