2012-04-14 15 views
9

Sto utilizzando la libreria di foto iPad (rullino fotografico) per importare alcune immagini e inserirle in un UIImageView creato utilizzando il metodo di allocazione. ma quando vengono mostrate le immagini c'è una grande perdita di qualità dell'immagine. Ad esempio, nella libreria c'è un'immagine con un fiume che è molto nitida, pixel per pixel, ma quando la impongo perde almeno la metà dei pixel. Questo è il codice per l'importazione dell'immagine:perdita di qualità dell'immagine notevole durante l'importazione dalla libreria iOS

- (IBAction) useCameraRoll: (id)sender 
{ 
    @autoreleasepool { 

if ([self.popoverController isPopoverVisible]) { 
    [self.popoverController dismissPopoverAnimated:YES]; 

} else{ 

    }{ 
    if ([UIImagePickerController isSourceTypeAvailable: 
     UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
    { 
     @autoreleasepool { 

     UIImagePickerController *imagePicker = 
     [[UIImagePickerController alloc] init]; 

     imagePicker.delegate = self; 
     imagePicker.sourceType = 
     UIImagePickerControllerSourceTypePhotoLibrary; 
     imagePicker.mediaTypes = [NSArray arrayWithObjects: 
            (NSString *) kUTTypeImage, 
            nil]; 

     imagePicker.allowsEditing = YES; 

     self.popoverController = [[UIPopoverController alloc] 
            initWithContentViewController:imagePicker]; 
     } 
     popoverController.delegate = self; 

     [self.popoverController 
     presentPopoverFromBarButtonItem:sender 
     permittedArrowDirections:UIPopoverArrowDirectionUp 
     animated:YES]; 


     newMedia = NO; 


    }} 
} 
} 

-(void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [self.popoverController dismissPopoverAnimated:true]; 
@autoreleasepool { 

NSString *mediaType = [info 
         objectForKey:UIImagePickerControllerMediaType]; 

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { 
    UIImage *image = [info 
         objectForKey:UIImagePickerControllerEditedImage]; 

    image1.image = image; 
    if (newMedia) 
     UIImageWriteToSavedPhotosAlbum(image, 
             self, 
              @selector(image:finishedSavingWithError:contextInfo:), 
             nil); 
} 
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
{ 
    // Code here to support video if enabled 
}} 
} 

-(void)image:(UIImage *)image 
finishedSavingWithError:(NSError *)error 
contextInfo:(void *)contextInfo 
{ 
if (error) { 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle: @"Save failed" 
          message: @"Failed to save image"\ 
          delegate: nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
    [alert show]; 
} 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 

} 

E la differenza di qualità (immagine ingrandita), ma si può vedere chiaramente la differenza anche in scala ridotta:

iOS libreria:

enter image description here

mio UIImageView:

enter image description here

risposta

0

Forse si dovrebbe usare

UIImage *img = [info valueForKey:@"UIImagePickerControllerOriginalImage"]; 

per ottenere l'immagine originale.

+0

voi significa invece di UIImage * image = [info objectForKey: UIImagePickerControllerEditedImage]; ?? – Alessandro

+0

Sì, funziona benissimo. anche il mio era ok in questo modo: UIImage * image = [info objectForKey: UIImagePickerControllerOriginalImage]; – Alessandro

+0

... ma non c'è alcuna opzione di modifica, e vorrei mantenere la versione modificata !! – Alessandro

0

Ho notato un problema simile quando si lavora su un'app universale. Scegliere un'immagine dall'Album fotografico su iPod touch con allowEditing = SÌ ha funzionato bene senza perdita di qualità, ma su iPad l'UIImagePickerControllerEditedImage aveva una larghezza di soli 320 pixel, con una conseguente perdita di qualità, penso perché il popover utilizzato per la modifica è solo 320 pixel di larghezza!

Dopo molte ricerche mi sono imbattuto this code per ritagliare l'immagine originale di nuovo utilizzando impostazioni di ritaglio dell'Utente dal dizionario, ma non posso evitare di pensare ci deve essere un modo migliore per gestire questo sul iPad

Problemi correlati