如何在 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
尽管我的 ImageAnalysis
的 targetResolution
在 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")
}
有没有办法使用 CameraX
查询可用的相机分辨率?使用 Camera2
这可以使用 StreamConfigurationMap.getOutputSizes()。但是,我找不到使用 CameraX
.
documentation 已经过时了,这无济于事。目前它引用版本 1.0.0-alpha06
并且许多 API 在最新的 1.0.0-beta01
.
编辑:
有一种方法可以使用 Camera2
API 获取可用的分辨率(感谢下面 Wasim 的回答)。然而,这只有在相机绑定到生命周期后才有可能,因此目标分辨率不能再改变,这使得它变得毫无用处。
当然,我可以在不知道可用分辨率的情况下指定目标分辨率,但这样我就无法控制结果的纵横比。在我的例子中,我最终得到一个 16:9 Preview
和一个 4:3 ImageAnalysis
尽管我的 ImageAnalysis
的 targetResolution
在 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")
}