2012-04-14 23 views
9

Używam biblioteki zdjęć iPada (rolki aparatu) do importowania niektórych obrazów i umieszczania ich w utworzonym UIImageView przy użyciu metody alloc. ale gdy wyświetlane są obrazy, dochodzi do utraty doskonałej jakości obrazu. Na przykład w bibliotece znajduje się obraz z rzeką, który jest bardzo ostry, piksel po pikselu, ale gdy go zaimportuję, traci co najmniej połowę pikseli. Jest to kod do importowania obrazu:zauważalna utrata jakości obrazu podczas importowania z biblioteki 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 
{ 

} 

a różnica jakości (obraz powiększony), ale można wyraźnie zobaczyć różnicę nawet w małej skali:

iOS Biblioteka:

enter image description here

Moje UIImageView:

enter image description here

Odpowiedz

0

Może należy użyć

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

dostać oryginalny obraz.

+0

ty średnia zamiast UIImage * image = [info objectForKey: UIImagePickerControllerEditedImage]; ?? – Alessandro

+0

Tak, działa pięknie. nawet mój był w porządku w ten sposób: UIImage * image = [info objectForKey: UIImagePickerControllerOriginalImage]; – Alessandro

+0

... ale nie ma opcji edycji i chciałbym zachować edytowaną wersję !! – Alessandro

0

Zauważyłem podobny problem podczas pracy nad aplikacją Universal. Wybranie obrazu z albumu fotograficznego na iPodzie touch za pomocą funkcji allowEditing = YES działało dobrze bez utraty jakości, ale na urządzeniu iPad rozmiar UIImagePickerControllerEditedImage miał tylko 320 pikseli szerokości, co powodowało utratę jakości, ponieważ popover użyty do edycji jest tylko 320 pikseli szerokości!

Po długich poszukiwaniach natknąłem this code ponownie przyciąć oryginalny obraz przy użyciu ustawień upraw Użytkownika ze słownika, ale nie mogę się oprzeć wrażeniu, że musi być lepszy sposób obsłużyć to na iPadzie

Powiązane problemy