7

私が直面している問題は、ユーザーが私たちのアプリで を使用して写真を撮るときAVCaptureSessionに、写真を縦向きモードで撮ったか横向きモードで撮ったかを判断する方法がないことです。私たちのアプリはポートレートのみをサポートし、携帯電話を使用するときは方向ロックをオンにしておくので、他の人が同じことをする可能性があると仮定してソリューションを構築しようとしています.

使用してみまし[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]たが、方向ロックがオンになっていると、通知が届きません。この機能が可能なのは、携帯電話の方向ロックがオンになっているときに、ベースのカメラ アプリと Google ハングアウト アプリのカメラが回転を検出できるためです (キャンセル ボタンとフラッシュ ボタンのアニメーションは明らかです)。

加速度計を使用して、電話が回転している角度を検出するのが最善の策ですか? 古い答えDetect iPhone screen orientationは、その方法で角度を検出するのが簡単であることを非常に明白にします (明らかに、UIAccelerometer の代わりに Core Motion を使用するように答えを適応させます)。それ。

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同じように。

そのディクショナリのすべてのキーは、ここにあります

方向ロックをオンにしてデフォルトのカメラアプリで簡単なテストを行ったところ、2 つの写真の方向が異なっていました。縦向きの場合は 6 つ、横向きの場合は 3 つです。

繰り返しになりますが、これについて詳しく説明したいと思いますが、ドキュメントを調べればわかると思います。

于 2014-05-22T17:08:56.987 に答える