Как мне сделать точную копию UIImage, возвращенного из UIImagePickerController?

У меня разные потребности в изображении, возвращаемом с камеры iPhone. Мое приложение уменьшает изображение для загрузки и отображения, а недавно я добавил возможность сохранять изображение в приложении «Фото».

Сначала я назначал возвращаемое значение двум отдельным переменным, но оказалось, что они использовали один и тот же объект, поэтому я получал два уменьшенных изображения вместо одного в полном масштабе.

После того, как выяснилось, что вы не можете сделать UIImage * copyImage = [myImage copy]; , я сделал копию, используя imageWithCGImage , как показано ниже. К сожалению, это не работает, потому что копия (здесь croppedImage ) оказывается повернутой на 90º относительно оригинала.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{   
    // Resize, crop, and correct orientation issues
    self.originalImage = [info valueForKey:@"UIImagePickerControllerOriginalImage"];
    UIImageWriteToSavedPhotosAlbum(originalImage, nil, nil, nil);
    UIImage *smallImage = [UIImage imageWithCGImage:[originalImage CGImage]]; // UIImage doesn't conform to NSCopy

    // This method is from a category on UIImage based on this discussion:
    // http://discussions.apple.com/message.jspa?messageID=7276709
    // It doesn't rotate smallImage, though: while imageWithCGImage returns
    // a rotated CGImage, the UIImageOrientation remains at UIImageOrientationUp!
    UIImage *fixedImage = [smallImage scaleAndRotateImageFromImagePickerWithLongestSide:480];
    ...
}

Есть ли способ скопировать изображение UIImagePickerControllerOriginalImage, не изменяя его в процессе?

7
задан clozach 5 October 2010 в 21:41
поделиться