如何在 Android 上使用 CameraX 获取可用分辨率?

How to get available resolutions using CameraX on Android?

有没有办法使用 CameraX 查询可用的相机分辨率?使用 Camera2 这可以使用 StreamConfigurationMap.getOutputSizes()。但是,我找不到使用 CameraX.

执行此操作的方法

documentation 已经过时了,这无济于事。目前它引用版本 1.0.0-alpha06 并且许多 API 在最新的 1.0.0-beta01.

中发生了变化

编辑:

有一种方法可以使用 Camera2 API 获取可用的分辨率(感谢下面 Wasim 的回答)。然而,这只有在相机绑定到生命周期后才有可能,因此目标分辨率不能再改变,这使得它变得毫无用处。

当然,我可以在不知道可用分辨率的情况下指定目标分辨率,但这样我就无法控制结果的纵横比。在我的例子中,我最终得到一个 16:9 Preview 和一个 4:3 ImageAnalysis 尽管我的 ImageAnalysistargetResolution 在 16:9 (224x126).

郑重声明,这是获得输出大小的方法:

val camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalyzer)
val cameraId = Camera2CameraInfo.extractCameraId(camera.cameraInfo)
val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val streamConfigurationMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
val outputSizes = streamConfigurationMap.getOutputSizes(format)

仍在寻找实际的解决方案。提前致谢。

您始终可以使用 camera2 api StreamConfigurationMap.getOutputSizes() 来获得支持的分辨率,即使在 CameraX 中也是如此。由于 CameraX 是在 camera2 之上构建的,因此应该无关紧要。

如果你想知道camerax支持什么分辨率,没有API。 但是您始终可以设置您选择的分辨率,cameraX 会负责将其缩放到最接近的支持分辨率。

这可以帮助任何在这里谷歌搜索的人。

AndroidCameraX,获取CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE.

等相机特性

对于 2021 年,语法类似于...

那么,您已经完成了获取相机的过程...

theCamera = cameraProvider.bindToLifecycle((LifecycleOwner)this,
              yourCameraSelector, yourImageAnalysis, yourPreview);

现在的代码是:

CameraCharacteristics camChars = Camera2CameraInfo
   .extractCameraCharacteristics(theCamera.getCameraInfo());
float discoveredMinFocusDistance = camChars
   .get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

您可能需要

@SuppressLint("UnsafeExperimentalUsageError")
CameraCharacteristics camChars =  ...

第一行。

This 为我工作:

val camera = cameraProvider.bindToLifecycle(mainActivity, cameraSelector, CameraManager.imageAnalysis)

val cameraId = Camera2CameraInfo.from(camera.cameraInfo).cameraId
val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val configs: StreamConfigurationMap? = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)

val imageAnalysisSizes = configs?.getOutputSizes(ImageFormat.YUV_420_888)
imageAnalysisSizes?.forEach {
    Log.i("LOG", "Image capturing YUV_420_888 available output size: $it")
}

val previewSizes = configs?.getOutputSizes(SurfaceTexture::class.java)
previewSizes?.forEach {
    Log.i("LOG", "Preview available output size: $it")
}