Android Camera2输出尺寸

pio*_*ski 8 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Camera.Parameters parameters =  camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
Run Code Online (Sandbox Code Playgroud)

和上面的代码返回预览大小的32个组合山雀如:2560x1920,1920x1080,1080x1920,2560x2560等.在这种情况下,我能够选择最佳的尺寸,并显示正确的图像.

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

dnh*_*yde 5

正如@Alex Cohn 所说,这取决于制造商是否接受 Camera API2。

您可以通过camCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);返回与 Camera API2 支持级别int相对应的来检查是否 支持Camera API2。如果您获得的级别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 及更高版本,开发人员应该知道这一点)


Vol*_*rov 4

代替

Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);
Run Code Online (Sandbox Code Playgroud)

Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG)
Run Code Online (Sandbox Code Playgroud)

  • 我不是 100% 确定,但这将为您提供静态捕获支持的尺寸,而不是预览的尺寸。 (3认同)