2012-04-14 10 views
9

Estoy utilizando la biblioteca de fotos del iPad (rollo de cámara) para importar algunas imágenes y colocarlas en un UIImageView que creo utilizando el método alloc. pero cuando se muestran las imágenes, hay una gran pérdida de calidad de imagen. Por ejemplo, en la biblioteca hay una imagen con un río que es muy nítida, píxel por píxel, pero cuando la importo pierde al menos la mitad de los píxeles. Este es el código para importar la imagen:pérdida de calidad de imagen notable al importar desde la biblioteca de 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 
{ 

} 

Y la diferencia de calidad (imagen ampliada), pero se puede ver claramente la diferencia, incluso en pequeña escala: Biblioteca

iOS:

enter image description here

Mi UIImageView:

enter image description here

Respuesta

0

Tal vez deberías utilizar

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

para obtener la imagen original.

+0

se mean en lugar de UIImage * image = [info objectForKey: UIImagePickerControllerEditedImage]; ?? – Alessandro

+0

Sí, funciona muy bien. incluso el mío estaba bien de esta manera: UIImage * image = [info objectForKey: UIImagePickerControllerOriginalImage]; – Alessandro

+0

... pero no hay opción de edición, y me gustaría conservar la versión editada. – Alessandro

0

Me di cuenta de un problema similar cuando se trabaja en una aplicación universal. Elegir una imagen del Álbum de fotos en iPod touch con allowEditing = YES funcionó bien sin pérdida de calidad, pero en el iPad el UIImagePickerControllerEditedImage tenía solo 320 píxeles de ancho, lo que resulta en una pérdida de calidad, creo que porque el popover utilizado para la edición es solo 320 píxeles de ancho!

Después de mucho buscar me encontré con this code para recortar la imagen original de nuevo usando la configuración de recorte del usuario del diccionario, pero no puedo evitar sentir Tiene que haber una mejor manera de manejar esto en el IPAD

Cuestiones relacionadas