ОК, поэтому следующий код работает, но я не понимаю почему. Я снимаю неподвижные изображения с фронтальной камеры с помощью AVFoundation. У меня этот код перед инициирующим захвата:Странное поведение при повороте AVFoundation неподвижных изображений на iOS
if ([connection isVideoOrientationSupported]) {
AVCaptureVideoOrientation orientation;
switch ([UIDevice currentDevice].orientation) {
case UIDeviceOrientationPortraitUpsideDown:
orientation = AVCaptureVideoOrientationPortraitUpsideDown;
break;
case UIDeviceOrientationLandscapeLeft:
orientation = AVCaptureVideoOrientationLandscapeRight;
break;
case UIDeviceOrientationLandscapeRight:
orientation = AVCaptureVideoOrientationLandscapeLeft;
break;
default:
orientation = AVCaptureVideoOrientationPortrait;
break;
}
[connection setVideoOrientation:orientation];
}
, а затем это в captureStillImageAsynchronouslyFromConnection:completionHandler:
для хранения изображений:
NSData *imageData = [AVCaptureStillImageOutputjpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *i = [UIImage imageWithData:imageData];
orientation:i.imageOrientation];
UIGraphicsBeginImageContext(i.size);
[i drawAtPoint:CGPointMake(0.0, 0.0)];
image.image = UIGraphicsGetImageFromCurrentImageContext();
, как вы можете видеть, я не повернуть изображение или что-нибудь, просто рисовать это в контексте и сохранить. Но как только я пытаюсь использовать i
, он всегда поворачивается на 90 градусов. Если я пытаюсь повернуть его с помощью
UIImage *rotated = [[UIImage alloc] initWithCGImage:i.CGImage scale:1.0f orientation:i.imageOrientation];
он не работает (без изменений с использованием только i
).
Я понимаю, что UIImage может просто нарисовать изображение в контексте, используя правильную ориентацию автоматически, но WTF?
Спасибо, но, как я уже сказал, мой код работает для каждой ориентации, просто потому, что я точно не понимаю почему. – mirosval