2011-06-13 18 views
6

Actualmente estoy haciendo una aplicación para el iphone donde el usuario toma una foto o la selecciona de un álbum, luego se coloca una superposición sobre la imagen. El usuario puede escalar, rotar y guardar la imagen. Actualmente, puedo tomar fotos o elegir una para el álbum. En cuanto a la superposición, acabo de utilizar UIImageView y la coloqué en la parte superior de la jerarquía en el constructor de interfaces. Para la cámara, estoy usando este código:Editar imagen después de tomar una foto

-(IBAction)getPhoto:(id)sender { 

// Create an image picker controller 
UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init]; 


if((UIButton *) sender == choosePhotoBtn) { 
    // Set source to photo albums 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
} 

else { 
    // Set source to camera 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    imagePicker.showsCameraControls = YES; 
} 

// Delegate is self 
imagePicker.delegate = self; 

    // Allow editing of image 
    imagePicker.allowsEditing = YES; 

    // Show image picker 
    [self presentModalViewController:imagePicker animated: YES]; 
} 

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
// Dismiss modalviewcontroller 
[picker dismissModalViewControllerAnimated:YES]; 

// Displaying image to the imageView 
imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

// Access the uncropped image from info dictionary 
UIImage * image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 


// Save Image 
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 

[picker release]; 
} 

El problema que estoy teniendo en este momento, está editando la foto después de que se están tomando. ¿Cómo puedo personalizar la cámara a comportarse como esto ?:

  1. elegir entre usar la cámara o conseguir la foto del álbum

  2. Una vez elegido, la imagen superpuesta cambiará a uno donde yo' he puesto un "círculo" en la cara, y la foto estará debajo como una máscara. Esta vista también podrá editarse en pantalla completa. Puede rotar, escalar y mover la imagen hasta que haga clic en "Hecho".

He leído esta parte en el manual pero parece que no puedo entender cómo usarlo. http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html

Espero que alguien pueda indicarme la dirección correcta.

Muchas gracias. -Hakimo

Respuesta

18

hay una forma no cambie su código mucho:

- (IBAction)takePicture:(id)sender { 
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
} else { 
    [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
} 

[imagePicker setAllowsEditing:YES]; 
[imagePicker setDelegate:self]; 

//place image picker on the screen 
[self presentViewController:imagePicker animated:YES completion:nil]; 
} 

Si desea utilizar la imagen que después de la edición, por favor, cambie " UIImagePickerControllerOriginalImage "a" UIImagePickerControllerEditedImage ", eso es todo!

+0

¿Dónde OP utiliza UIImagePickerControllerOriginalImage o UIImagePickerControllerEditedImage? No te entiendo – inherithandle

+0

@inherithandle OP se refiere al método 'imagePickerController: didFinishPickingMediaWithInfo:' de UIImagePickerControllerDelegate. El parámetro 'info' contiene un NSDictionary que contiene las teclas de información de edición como' UIImagePickerControllerOriginalImage' y 'UIImagePickerControllerEditedImage' –

0

Para Q1, ¿es posible implementar una hoja de acción para que el usuario pueda elegir usar la foto de un álbum o tomar una nueva foto ?. con la función de hoja de acción como algo parecido a lo siguiente:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) { 
     picker = [[UIImagePickerController alloc]init]; 
     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     picker.delegate = self; 
     [self presentModalViewController:picker animated:YES]; 
     [picker release]; 
    } 

    else if (buttonIndex == 1) { 
     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
      picker = [[UIImagePickerController alloc]init]; 
      picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
      picker.allowsEditing = YES; 
      picker.delegate = self; 
      [self presentModalViewController:picker animated:YES]; 
      [picker release]; 
     } 
     else { 
      UIAlertView *noCameraMsg = [[UIAlertView alloc] initWithTitle:@"no camera on this phone" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [noCameraMsg show]; 
      [noCameraMsg release]; 

     } 


} 
+0

Gracias por la respuesta Xcoder. Nunca he usado hojas de acción antes, así que lo intentaré. ¿Hay alguna diferencia entre usar hojas de acción y la que escribí? Puedo obtener fotos de álbumes y tomar fotos, pero no estoy seguro de cómo personalizar la página de edición. – hakimo

+0

Ahora veo qué hojas de acción son. Es casi como un UIAlertView. Podría usar esto para guardar la imagen en el prompt del álbum. Gracias de nuevo. – hakimo

Cuestiones relacionadas