Использование UIImageOrientation для правильного сохранения UIImage в альбомном режиме - PullRequest
1 голос
/ 28 марта 2012

Я получаю UIImage от AVCaptureSession и устанавливаю их на UIImageView. Портретный режим устанавливает изображения с правильной ориентацией, но как только я использую альбомный режим, изображения устанавливаются повернутыми на 90 градусов по часовой стрелке.

Я провел небольшое исследование и обнаружил, что могу использовать UIImageOrientation с этим методом для решения моей проблемы:

[UIImage imageWithCGImage:cgimageref scale:1 orientation:orientation]

Но я не понимаю как. Если я смотрю UIImageOrientation на всех изображениях, значение всегда равно 3 (NSLog(@"%d",UIImageOrientation)) в портретном и альбомном режимах. Я озадачен тем, как это может помочь мне. Я что-то упустил?

Вот код ориентации:

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
  self.prevLayer.frame = self.view.bounds;
  self.prevLayer.orientation = [[UIDevice currentDevice] orientation];
}

shouldAutorotateToInterfaceOrientation возвращает YES.

1 Ответ

4 голосов
/ 30 марта 2012

Решение заняло некоторое время, чтобы найти. Мне пришлось добавить ориентацию в AVCaptureConnection

AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in stillImageOutput.connections){
    for (AVCaptureInputPort *port in [connection inputPorts]){
        if ([[port mediaType] isEqual:AVMediaTypeVideo] ){
            videoConnection = connection;
            break;
        }
    }
    if (videoConnection) { break; }
}

Эта строка ниже является исправлением:

if([videoConnection isVideoOrientationSupported]) {
    [videoConnection setVideoOrientation:[[UIDevice currentDevice] orientation]];
}

И все изображения работают правильно с любой ориентацией.

...