Android Camera2输出尺寸

时间:2015-07-11 21:52:22

标签: android android-camera android-5.0-lollipop

我在Android Lollipop上测试了新的Camera2 API。我想获取支持的预览尺寸:

StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);

,三星Galaxy Tab S的最大预览尺寸为1440x1080像素,分辨率为2560x1600px。所以我的previewSize是1440x1080px,而TextureView表面尺寸是2560x1600px,因此图像会失真。

我测试了不推荐使用的旧Camera API。

Camera.Parameters parameters =  camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();

上面的代码返回32种varius预览大小的组合,例如:2560x19201920x10801080x19202560x2560等。在这种情况下,我可以选择最佳尺寸并显示正确的图像。

我不知道如何强制新的API来获得最佳尺寸。我知道解决方案是调整显示预览的视图大小,但内置相机应用程序正常工作在全屏模式下。 提前感谢所有建议!

2 个答案:

答案 0 :(得分:1)

替换

Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);

Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG)

答案 1 :(得分:0)

正如@Alex Cohn所说,要依赖Camera API2就是制造商。

您可以检查是否支持Camera API2 camCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);返回与Camera API2的level of support相对应的int。 如果您获得的级别基本上等于CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,则您的电话制造商不支持Camera API2。

->结果,SCALER_STREAM_CONFIGURATION_MAP返回的分辨率可能不同于Camera API1可以访问的分辨率。 这就是您获得

的原因
  

最大预览尺寸为1440x1080px

令我震惊的是4年前提出的问题...而且仍然有制造商不愿意升级到Camera API2。 尽管Camera API2为您提供了更多功能,但也许Camera API1并没有死。

如果能使用一些碎片信息,或者至少知道使用Camera API2时实际要瞄准多少设备(由于具有LEGACY支持,并不是所有的Android L及更高版本,开发人员都应该知道这一点), >