Kotlin 使用Camerax实现预览功能

在gradle中引入依赖

// CameraX核心库
    implementation("androidx.camera:camera-core:1.0.1")
    // CameraX视图库
    implementation("androidx.camera:camera-camera2:1.0.1")
    // CameraX生命周期库
    implementation("androidx.camera:camera-lifecycle:1.0.1")
    // CameraX扩展库,用于支持预览和分析
    implementation("androidx.camera:camera-view:1.0.0-alpha28")

获取相机权限

 private fun checkCameraPermission() {
        if (allPermissionsGranted()){
            LogUtil.e(TAG, "allPermissionsGranted=====>")
            initCamera()
        }else{
            LogUtil.e(TAG, "请求权限=====>")
            // 权限未被授予,请求权限
            ActivityCompat.requestPermissions(
                this, permissionArray, PackageManager.PERMISSION_GRANTED
            )
        }
    }

摄像头初始化

private fun initCamera(){
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        cameraProviderFuture.addListener({
            cameraProvider = cameraProviderFuture.get()

            bindCameraUseCases()
        }, ContextCompat.getMainExecutor(this))
    }
val cameraSelector = CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_BACK) // 后置摄像头
            .build()

        preview = Preview.Builder()
            .setTargetRotation(ROTATION_90) // 解决了变形问题
            .setTargetAspectRatio(AspectRatio.RATIO_16_9)
            .build()

        //拍照
        imageCapture = ImageCapture.Builder()
            .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
            .setTargetAspectRatio(AspectRatio.RATIO_16_9)
            .setTargetRotation(ROTATION_90)
            .build()

        //解绑用例
        cameraProvider.unbindAll()

 // 创建 ImageAnalysis 用于分析每一帧
        imageAnalysis = ImageAnalysis.Builder()
            .setTargetRotation(ROTATION_90)
            .setTargetResolution(Size(1280,720))
            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) // 只保留最新的帧,丢弃旧的帧。
            .setImageQueueDepth(10) // 设置图像队列的深度(缓冲区大小)
            .build()

        imageAnalysis?.setAnalyzer(ContextCompat.getMainExecutor(this), faceAnalyzer)

        cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis)

        //开始预览 previewView
        preview.setSurfaceProvider(binding.previewView.surfaceProvider)

这是在使用cameraX相机功能的一点总结,与诸位共勉!!!如果能帮到你,动动你发财的手指点个赞吧!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容