captureOutput中的iOS应用程序相机方向
首先,我知道很多人都问过类似的问题 – 但我找不到任何类似的问题。
当调用这个接口时:
- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(pixelBuffer, 0); // get buffer dimensions size_t bufferHeight = CVPixelBufferGetHeight(pixelBuffer); size_t bufferWidth = CVPixelBufferGetWidth(pixelBuffer); ...
当手机处于“肖像模式”时 ,我得到480的高度和640的宽度。 奇怪的是,当我检查[connection videoOrientation]
它被正确设置为肖像。
- 为什么连接方向不会影响采样缓冲区?
- 我应该自己旋转图像吗?
- 有没有一种方法来configuration设备方向的样品?
谢谢
@ Gabriel:我已经有这个代码:
-(void) viewWillLayoutSubviews { // Handle camera if (_videoPreviewLayer) { _videoPreviewLayer.frame = self.view.bounds; for (AVCaptureOutput* outcap in _captureSession.outputs) { for(AVCaptureConnection* con in outcap.connections) { switch ([[UIDevice currentDevice] orientation]) { case UIInterfaceOrientationPortrait: [con setVideoOrientation:AVCaptureVideoOrientationPortrait]; break; case UIInterfaceOrientationLandscapeRight: [con setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; //home button on right. Refer to .h not doc break; case UIInterfaceOrientationLandscapeLeft: [con setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; //home button on left. Refer to .h not doc break; case UIInterfaceOrientationPortraitUpsideDown: [con setVideoOrientation:AVCaptureVideoOrientationPortraitUpsideDown]; //home button on left. Refer to .h not doc break; default: [con setVideoOrientation:AVCaptureVideoOrientationPortrait]; //for portrait upside down. Refer to .h not doc break; } } } } }
正如我上面提到的,当检查连接时 – 这是正确的方向,图像虽然是错误的方向..
你是否通过手动修复来引用 – 使用什么方法来自动更改为正确的方向?
事情是,显示是好的,这只是拍摄的照片…
解决你的问题:
1 – 检查您是否禁用或修改了方向模式。
2 – 使用AVFoundation时,你必须自己旋转图像,这里是我使用的代码:
AVCaptureVideoOrientation newOrientation; switch ([[UIDevice currentDevice] orientation]) { case UIDeviceOrientationPortrait: newOrientation = AVCaptureVideoOrientationPortrait; break; case UIDeviceOrientationPortraitUpsideDown: newOrientation = AVCaptureVideoOrientationPortraitUpsideDown; break; case UIDeviceOrientationLandscapeLeft: newOrientation = AVCaptureVideoOrientationLandscapeRight; break; case UIDeviceOrientationLandscapeRight: newOrientation = AVCaptureVideoOrientationLandscapeLeft; break; default: newOrientation = AVCaptureVideoOrientationPortrait; }
3 – 使用上面的代码
希望这可以帮助。
好…
这是超级怪异的!
当默认的应用程序方向是横向的权利 – 它没有工作。
当我改变默认的应用程序的方向是肖像(button在底部) – 它突然开始工作…
我不知道这是一个错误或预期的行为…