使用UIImageOrientation在横向模式下正确保存UIImage

时间:2012-03-28 16:00:11

标签: iphone objective-c uiimage avcapturesession uiimageorientation

我正在从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 个答案:

答案 0 :(得分:4)

解决方案需要一些时间才能找到。我不得不为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]];
}

所有图像都适用于任何方向。