2012-04-14 10 views
9

iPadフォトライブラリ(カメラロール)を使用して画像をインポートし、UIImageViewに配置します。これはallocメソッドを使用して作成します。画像が表示されているときには画質が大幅に低下します。たとえば、図書館では、河川が非常に鮮明な画像が1ピクセルずつありますが、インポートすると少なくとも半分のピクセルが失われます。これは、画像をインポートするためのコードです: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 
{ 

} 

と品質の違い(中ズーム画像)しかし、あなたは明らかに小さな規模の違いを見ることができます:

iOSのライブラリ:

enter image description here

私のUIImageView:

enter image description here

答えて

0

たぶん、あなたは、元の画像を取得するために

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

を使用する必要があります。

+0

であなたをこれを処理するためのより良い方法があるように持って感じて助けることができませんUIImageの代わりに平均*画像= [情報 objectForKey:UIImagePickerControllerEditedImage]; ?? – Alessandro

+0

はい、うまく動作します。私の場合でもこの方法でOKでした:UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage]; – Alessandro

+0

...編集オプションはありません。編集したバージョンを保存したいと思います! – Alessandro

0

ユニバーサルアプリケーションで作業しているときに同様の問題が発生しました。 allowEditing = YESのiPod touchのフォトアルバムから画像を選んでも問題はありませんでしたが、iPadではUIImagePickerControllerEditedImageの幅が320ピクセルしかなく、結果として画質が低下しました。編集に使用するポップオーバーは320ピクセル幅!

がはるかに検索した後、私は辞書からユーザーのクロップ設定を使用して、再び元の画像をトリミングするthis codeに出くわしたが、私はiPadの

関連する問題