我遇到了AVCapture的问题。
背景故事:我为我的iPad应用程序制作了一个新故事板我复制了iPhone故事板并通过在需要的地方添加.iPad来更改新故事板的源代码。目前,我的应用仅使用纵向模式。
然而,AVCapture(我用它来显示相机的实时馈送)仅填充屏幕的一部分,外面有黑条。我也注意到它在3.5"屏幕iPhone。我会按要求添加代码。
请让所有说明都非常容易理解,这是我的第一个应用程序,我是新手。
谢谢! 分支
编辑:我在Apple的文档中尝试了这段代码,但它没有用: AVCaptureSession *captureSession;
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
UIView *aView;
previewLayer.frame = aView.bounds;
[aView.layer addSublayer:previewLayer];
答案 0 :(得分:6)
相机的纵横比与iPad屏幕的纵横比不同。您可以更改videoGravity
的{{1}}属性以填充整个图层(这将裁剪输入,但您不会看到条形图):
AVCaptureVideoPreviewLayer
当您实际拍摄图像时,您仍然可以获得整个相机输入,而不仅仅是图层预览。您需要根据UI进行数学运算(几何)旋转并裁剪它以获取用户实际看到的图像。
答案 1 :(得分:5)
也许我的问题很相似。对于解决方案,请执行以下操作:
我今天发布了我的解决方案,使用DBCamera报告问题,以下是完整内容:
这可能不是什么大事,但对于那些关心为什么从自定义全屏相机预览拍摄的照片看起来不完全相同的人来说,这是有用的。
我注意到使用自定义的摄像机视图(从DBCameraView继承,并从给定的示例中调用openCustomCamera)将生成全屏预览。从iPhone 5s和6s上的全屏预览拍摄的照片将从两侧获得一些额外的空间,这意味着在触发相机之前,最终照片在预览中看起来不完全相同。
这是因为:
1.代码中预设的会话是AVCaptureSessionPresetPhoto
2. previewLayer的videoGravity设置为AVLayerVideoGravityResizeAspectFill
3.预览的帧是设备屏幕的界限
用于previewLayer的videoGravity是系统默认的AVLayerVideoGravityResizeAspect。当您将会话预设为AVCaptureSessionPresetPhoto并将预览的大小设置为屏幕大小时,系统无法满足这两个条件,因为我认为AVCaptureSessionPresetPhoto将调整预览的大小(即调整大小方面)以对应高分辨率捕获的照片( 4:3?)。它的宽高比似乎与屏幕不同(4s不太明显),所以你可以看到黑色区域在顶部和底部都出现,即使你将预览的帧设置为等于屏幕边界。但是DBCamera在代码中将AVLayerVideoGravityResizeAspectFill设置为videoGravity。这将导致预览尝试填满整个屏幕并保持其正确的宽高比。自定义摄像机视图似乎填满了整个设备屏幕,但实际预览大于屏幕尺寸,从左侧和右侧扩展了超出屏幕的空间。
要解决问题以从全屏预览中获取完全相同的照片,请设置AVCaptureSessionPresetHigh而不是AVCaptureSessionPresetPhoto。它会工作。缺点是照片的质量可能不会保持不变,这就是权衡。
如果我错了,请纠正我,希望它有所帮助。