9

iPadのフォトライブラリ(カメラロール)を使用していくつかの画像をインポートし、allocメソッドを使用して作成したUIImageViewに配置しています。ただし、画像が表示されると、画質が大幅に低下します。たとえば、ライブラリには、ピクセルごとに非常にシャープな川のある画像がありますが、インポートすると、少なくとも半分のピクセルが失われます。これは、画像をインポートするためのコードです。

- (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ライブラリ:

ここに画像の説明を入力してください

私のUIImageView:

ここに画像の説明を入力してください

4

2 に答える 2

0

ユニバーサル アプリで作業しているときに、同様の問題に気付きました。iPod touch で allowEditing=YES を使用してフォト アルバムから画像を選択すると、品質が低下することなく正常に機能しましたが、iPad では UIImagePickerControllerEditedImage の幅が 320 ピクセルしかなく、品質が低下しました。編集に使用されるポップオーバーが幅320ピクセル!

多くの検索の後、辞書からユーザーのトリミング設定を使用して元の画像を再度トリミングするこのコードに出くわしましたが、iPadでこれを処理するためのより良い方法が必要であると感じずにはいられません

于 2013-04-24T14:55:36.183 に答える
0

多分あなたは使うべきです

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

元の画像を取得します。

于 2012-04-18T14:31:12.323 に答える