Почему ландшафтные режимы AVCaptureVideoOrientation приводят к перевернутым неподвижным изображениям?

Я использую классы AVFoundation для реализации настраиваемой камеры в моем приложении. Я снимаю только неподвижные изображения, а не видео. У меня все работает, но меня что-то ставит в тупик. Я принимаю во внимание ориентацию устройства при захвате неподвижного изображения и соответствующим образом устанавливаю видеоориентацию видеосоединения. Фрагмент кода:

    // set the videoOrientation based on the device orientation to
    // ensure the pic is right side up for all orientations
    AVCaptureVideoOrientation videoOrientation;
    switch ([UIDevice currentDevice].orientation) {
        case UIDeviceOrientationLandscapeLeft:
            // Not clear why but the landscape orientations are reversed
            // if I use AVCaptureVideoOrientationLandscapeLeft here the pic ends up upside down
            videoOrientation = AVCaptureVideoOrientationLandscapeRight;
            break;
        case UIDeviceOrientationLandscapeRight:
            // Not clear why but the landscape orientations are reversed
            // if I use AVCaptureVideoOrientationLandscapeRight here the pic ends up upside down
            videoOrientation = AVCaptureVideoOrientationLandscapeLeft;
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            videoOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
            break;
        default:
            videoOrientation = AVCaptureVideoOrientationPortrait;
            break;
    }

    videoConnection.videoOrientation = videoOrientation;

Обратите внимание на мои комментарии в случае альбомной ориентации. Мне нужно перевернуть отображение ориентации, иначе полученное изображение перевернется. Я захватываю и сохраняю изображение с помощью следующего кода:

[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection 
    completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
    {
        NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
        self.stillImage = [UIImage imageWithData:imageData];
        // notify observers (image gets saved to the camera roll)                                                           
        [[NSNotificationCenter defaultCenter] postNotificationName:CaptureSessionManagerDidCaptureStillImageNotification object:self];
        self.stillImage = nil;
}];

Никакой другой обработки или манипуляции с изображениями нет.

Мое приложение работает с приведенным выше кодом. Я просто пытаюсь понять, почему константы ориентации должны быть изменены для альбомной ориентации. Спасибо!

7
задан XJones 21 October 2011 в 06:00
поделиться