我想使用Camera2 API(在5.0版本的android中添加)从Android面向相机捕获4:3宽高比的视频。除非相机具有16:9传感器阵列(作为Samsung Galaxy S5上的前置摄像头),否则它可以正常工作。在这种情况下,图像看起来很像被捕获并被挤压到MediaRecorder提供的4:3表面。
根据文档,只要MediaRecorder的大小设置为getOutputSizes(MediaRecorder.class)提供的大小之一,就不需要任何其他配置。相机应自动裁剪图片,使其适合MediaRecorder表面的大小。
我测试了相反的情况 - 在相机上录制16:9视频,带有4:3传感器阵列(Nexus-5的前置摄像头)。它工作正常 - 图片裁剪为16:9宽高比。
我认为这是Android API中的一个错误,但是想看看我在这里想到的是什么。
重现该问题的最简单方法是使用谷歌提供的camera2Basic示例应用程序与以下change切换到使用前置摄像头和4:3大小进行预览。它在Nexus-5上正常工作,但在三星Galaxy S5上提供拉伸图像。三星Galaxy S5(android 5.0)上的camera2Basic应用程序的截图。
答案 0 :(得分:0)
如果是16x9,您可以(并且应该)使用内置裁剪功能选择图像的4x3区域。也就是说,只是为了丢弃不必要的"两边的像素。这可以通过使用CaptureRequest.SCALER_CROP_REGION向CaptureRequest添加字段/值来完成。
该链接更多地解释了它,但你真正需要的是一个if语句来检查传感器的比例和一个小数学来计算你想要选择的区域的边界。
答案 1 :(得分:0)
你可以通过参考android camera2应用程序源代码来避免它。 https://android.googlesource.com/platform/packages/apps/Camera2/+/android-cts-5.1_r4/src/com/android/camera/one/v2/OneCameraZslImpl.java