7

我遇到的问题是,当用户使用我们的应用程序拍照时,使用AVCaptureSession,我无法确定他们是在纵向还是横向模式下拍摄照片。我们的应用程序仅支持肖像,并且我在使用手机时保持方向锁定,因此我正在尝试构建一个解决方案,假设其他人可能会这样做。

我研究过使用[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications],但是当方向锁定打开时,没有收到任何通知。我知道这个功能是可行的,因为当我的手机打开方向锁定时,基本相机应用和 Google Hangouts 应用中的相机可以检测到旋转(取消和 Flash 按钮上的动画很明显)。

我最好的选择是使用加速度计并检测手机旋转的角度吗?一个旧的答案,Detect iPhone screenorientation ,很明显,以这种方式检测角度很容易做到(显然将答案调整为使用 Core Motion 而不是 UIAccelerometer),但我很好奇是否还有另一种方法可以做它。

4

1 回答 1

1

是的,您可以通过查看图像的元数据来做到这一点。没有时间写一个详细的答案(对此感到抱歉),但我为我自己的项目做了一段时间,CMCopyDictionaryOfAttachments(NULL, buffer, kCMAttachmentMode_ShouldPropagate);因为我在缓冲区中传递了一个CMSampleBufferRef。我从

captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler: ^(CMSampleBufferRef imageDataSampleBuffer, NSError *error){},

但你可以从

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection也是。

您可以在此处找到该词典的所有键。

在打开方向锁定的情况下使用默认相机应用程序进行了快速测试,我确实得到了两张图片的不同方向。6 为纵向 1,3 为横向 1。

再次,很乐意为您提供有关此的更多详细信息,但我相信您可以通过查看文档来弄清楚。

于 2014-05-22T17:08:56.987 回答