Joh*_*ibe 5 android kotlin android-camerax
我\xc2\xb4m 尝试编写我的第一个Android 相机应用程序,但它总是选择变焦相机而不是主相机。(我在华为P30 Pro上测试过)
\n\n该代码基于官方的camerax示例应用程序(https://github.com/android/camera-samples/tree/master/CameraXBasic)
\n\n相关代码:
\n\n/** Declare and bind preview, capture and analysis use cases */\nprivate fun bindCameraUseCases() {\n\n // Get screen metrics used to setup camera for full screen resolution\n val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }\n Log.d(TAG, "Screen metrics: ${metrics.widthPixels} x ${metrics.heightPixels}")\n\n val screenAspectRatio = aspectRatio(metrics.widthPixels, metrics.heightPixels)\n Log.d(TAG, "Preview aspect ratio: $screenAspectRatio")\n\n val rotation = viewFinder.display.rotation\n\n // Bind the CameraProvider to the LifeCycleOwner\n\n val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()\n\n val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())\n cameraProviderFuture.addListener(Runnable {\n\n // CameraProvider\n val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()\n\n // Preview\n preview = Preview.Builder()\n // We request aspect ratio but no resolution\n .setTargetAspectRatio(screenAspectRatio)\n // Set initial target rotation\n .setTargetRotation(rotation)\n .build()\n\n // ImageCapture\n imageCapture = ImageCapture.Builder()\n .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)\n // We request aspect ratio but no resolution to match preview config, but letting\n // CameraX optimize for whatever specific resolution best fits our use cases\n .setTargetAspectRatio(screenAspectRatio)\n // Set initial target rotation, we will have to call this again if rotation changes\n // during the lifecycle of this use case\n .setTargetRotation(rotation)\n .build()\n\n // Must unbind the use-cases before rebinding them\n cameraProvider.unbindAll()\n\n try {\n // A variable number of use-cases can be passed here -\n // camera provides access to CameraControl & CameraInfo\n camera = cameraProvider.bindToLifecycle(\n this, cameraSelector, preview, imageCapture /**, imageAnalyzer*/)\n\n // Attach the viewfinder\'s surface provider to preview use case\n preview?.setSurfaceProvider(viewFinder.createSurfaceProvider(camera?.cameraInfo))\n } catch(exc: Exception) {\n Log.e(TAG, "Use case binding failed", exc)\n }\n\n }, ContextCompat.getMainExecutor(requireContext()))\n}\nRun Code Online (Sandbox Code Playgroud)\n
使用当前的 CameraX API,我认为您无法选择使用哪个特定相机,您只能选择镜头朝向(CameraSelector.Builder().requireLensFacing(int)),可以是正面或背面。当您绑定用例时,CameraX 选择第一个满足用例要求的相机。例如,在将预览用例与启用或禁用的扩展绑定时,可以使用 2 个不同的后置摄像头。
该CameraSelectorAPI 似乎仍有增长空间,因此将来您可能可以更好地控制选择哪个相机。如果您现在需要这种控制,您可能需要使用 Camera2。
| 归档时间: |
|
| 查看次数: |
8467 次 |
| 最近记录: |