Я использую классы 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;
}];
Никакой другой обработки или манипуляции с изображениями нет.
Мое приложение работает с приведенным выше кодом. Я просто пытаюсь понять, почему константы ориентации должны быть изменены для альбомной ориентации. Спасибо!