# CameraX **Repository Path**: emerger/CameraX ## Basic Information - **Project Name**: CameraX - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-30 - **Last Updated**: 2024-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CameraX ## 1 简述 CameraX 是一个 Jetpack 支持库,简化了相机应用的开发工作。提供一致且易用的 API 接口,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。
另外,还解决了设备兼容性问题,节省了开发者的大量兼容工作。 ## 2 流程 使用CameraX开发相机比起Camera2方便很多,大概步骤可以分为四步,配置 -> 预览 -> 分析图片 -> 拍摄图片。
具体可参考 [官方文档](https://developer.android.google.cn/training/camerax) ## 3 示例 > 1、获取相机 cameraProvider ```java ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(mContext); cameraProviderFuture.addListener(() -> { try { cameraProvider = cameraProviderFuture.get(); // 绑定相机用例 bindCameraUseCases(); } catch (CameraInfoUnavailableException | InterruptedException | ExecutionException e) { Log.e(TAG, e.getMessage()); } }, ContextCompat.getMainExecutor(mContext)); ``` > 2、配置预览
> 3、配置拍摄参数
> 4、配置图片分析器
> 5、将这些配置绑定到相机的生命周期
```java private void bindCameraUseCases() { DisplayMetrics metrics = new DisplayMetrics(); mCameraViewBind.getDisplay().getRealMetrics(metrics); int screenAspectRatio = CameraHelper.aspectRatio(metrics.widthPixels, metrics.heightPixels); int rotation = mCameraViewBind.getDisplay().getRotation(); CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(lensFacing).build(); preview = new Preview.Builder() .setTargetAspectRatio(screenAspectRatio) .setTargetRotation(rotation) .build(); imageCapture = new ImageCapture.Builder() .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY) // 快速拍 or 高质量图片 .setTargetAspectRatio(screenAspectRatio) .setTargetRotation(rotation) .setFlashMode(flashMode) .build(); imageAnalyzer = new ImageAnalysis.Builder() .setTargetAspectRatio(screenAspectRatio) .setTargetRotation(rotation) .build(); UseCaseGroup useCaseGroup = new UseCaseGroup.Builder() .addUseCase(preview) .addUseCase(imageAnalyzer) .addUseCase(imageCapture) .build(); // 可设置相机分析器imageAnalyzer.setAnalyzer(); // Make sure that there are no other use cases bound to CameraX cameraProvider.unbindAll(); try { mCamera = cameraProvider.bindToLifecycle(this, cameraSelector, useCaseGroup); preview.setSurfaceProvider(mCameraViewBind.getSurfaceProvider()); } catch (Exception e) { Log.e(TAG, "Use case binding failed", e); } } ``` > 6、拍照,得到图片结果 ```java public void onClick() { ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(new File(...)).build(); imageCapture.takePicture(outputFileOptions, cameraExecutor, new ImageCapture.OnImageSavedCallback() { @Override public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) { // insert your code here. } @Override public void onError(ImageCaptureException error) { // insert your code here. } } ); } ``` ​ [官方示例](https://github.com/android/camera-samples/tree/main/CameraXBasic) (kotlin版本)
[demo](https://github.com/halloayu/CameraX.git) (Java版本)