2015-10-09 46 views
1

使用AVCaptureSession将相机图像显示到小预览图层(AVCaptureVideoPreviewLayer)时,图像将缩放以适合图层大小。如何在使用AVCaptureVideoPreviewLayer时保持捕获的视频大小

为了填补全部预览层,这个比例是可配置的设置:

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 

的问题是,这只会重新调整以填充层和摄像机图像非常大,图像被调整大小变得太小。

我正在寻找的是一种让我的预览图层显示内置摄像头的缩放级别相同的水平的方法,丢弃剩余的图像(想象设备摄像头被遮罩,只在屏幕中间显示一个方形) 。

我也试图通过发出多个预设变化的捕获预置,但没有成功:

AVCaptureSession *session = [[AVCaptureSession alloc]init]; 
session.sessionPreset = AVCaptureSessionPresetMedium; 

回答

1

这里就是你要做的:

你得到的inputVideo大小:

AVCaptureDeviceInput *videoDeviceInput = // initialised already in your app 

// Here you can get the video dimensions: 
CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(videoDeviceInput.device.activeFormat.formatDescription); 

您将尺寸为previewLayer的尺寸设置为视频供稿的尺寸。 现在你有一个1:1比例的视频图层。

然后,您只需将previewLayer居中置于窗口内。

相关问题