2012-10-07 13 views
5

Sto tentando di implementare una vista della videocamera iOS che riprenda immagini di forma quadrata (simile a Instagram). Il mio codice viene visualizzato sotto. La prima parte, in cui l'altezza del frame è impostata per essere uguale alla larghezza del frame, funziona come previsto e all'utente viene assegnata una vista quadrata. Il problema si verifica più tardi quando tento di applicare il frame (che è una proprietà CGRect) ai dati dell'immagine utilizzando CGImageCreateWithImageInRect. Passo il frame rect a questo metodo con l'immagine. Ma i risultati non sono ritagliati per essere quadrati. Invece l'immagine mantiene le dimensioni predefinite originali dalla telecamera iOS. Qualcuno può dirmi cosa ho fatto di sbagliato? La mia comprensione dalla documentazione di Apple è che CGImageCreateWithImageInRect dovrebbe selezionare un'area dell'immagine di forma Rect da qualche coordinata x/y iniziale. Ma non sembra che stia succedendo.Ritagliare l'immagine 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 
} 
} 

risposta

0

Stai facendo bene. L'unica cosa è che penso tu stia impostando la proprietà frame come la vista picker, quindi la dimensione finale è la stessa della dimensione originale.

tenta di impostare telaio più piccolo di pickerView.view.frame, non uguale

check this out

Cropping an UIImage

+0

ho provato passando un CGRect arbitrariamente piccolo ma l'output ha 0 byte di dati immagine. Ho usato CGRect rect = CGRectMake (0, 26, 50, 50) ;. Inoltre, il mio codice originale imposta l'altezza del fotogramma per essere uguale alla larghezza, quindi è più piccola della dimensione originale. È essenzialmente un quadrato 320x320 basato sulle dimensioni dello schermo dell'iPhone. – hughesdan

+0

forse questa risposta può aiutare http://stackoverflow.com/a/10185736/1447414 – user1447414

Problemi correlati