我如何从设备相机拍照?

问题描述 投票:0回答:1

Failed to save hand image: Processing failed.

我尝试了很多尝试,但它们都没有奏效 如果有人能帮助我解决这个问题,我会很感激 谢谢

这是功能代码:

    private fun captureAndSaveImage(context: Context, folderPath: String) {
        if (isCameraInitialized) return

        val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
        cameraProviderFuture.addListener({
            val cameraProvider = cameraProviderFuture.get()
            val preview = Preview.Builder().build()
            val imageCapture = ImageCapture.Builder().build()

            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

            try {
                cameraProvider.unbindAll()
                cameraProvider.bindToLifecycle(
                    context as androidx.lifecycle.LifecycleOwner,
                    cameraSelector,
                    preview,
                    imageCapture
                )
                isCameraInitialized = true

                val photoFile = ContentValues().apply {
                    put(MediaStore.MediaColumns.DISPLAY_NAME, "Detected_Hand_Image.jpg")
                    put(MediaStore.MediaColumns.RELATIVE_PATH, folderPath)
                    put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
                }

                val resolver = context.contentResolver
                val outputOptions = ImageCapture.OutputFileOptions.Builder(
                    resolver,
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    photoFile
                ).build()

                if (!cameraProvider.isBound(preview) || !cameraProvider.isBound(imageCapture)) {
                    Log.e("CameraX", "Camera is not ready or already closed.")
                }

                Handler(Looper.getMainLooper()).postDelayed({
                    imageCapture.takePicture(
                        outputOptions,
                        ContextCompat.getMainExecutor(context),
                        object : ImageCapture.OnImageSavedCallback {
                            override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
                                Log.d("MediaStore", "Hand image saved successfully.")
                            }

                            override fun onError(exception: ImageCaptureException) {
                                Log.e("MediaStore", "Failed to save hand image: ${exception.message}")
                            }
                        }
                    )
                }, 2000)

            } catch (exc: Exception) {
                Log.e("CameraX", "Failed to bind camera use cases", exc)
            }
        }, ContextCompat.getMainExecutor(context))
    }

使用降级的相机依赖性版本:

def camerax_version = "1.2.2"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-video:${camerax_version}"

implementation "androidx.camera:camera-view:${camerax_version}"
implementation "androidx.camera:camera-extensions:${camerax_version}"
plapease从这三个功能中参考:
android kotlin android-studio error-handling camera
1个回答
0
投票
private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(this) cameraProviderFuture.addListener({ // Used to bind the lifecycle of cameras to the lifecycle owner val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() // Preview val preview = Preview.Builder() .build() .also { it.setSurfaceProvider(binding.viewFinder.surfaceProvider) } imageCapture = ImageCapture.Builder() .build() // Select back camera as a default val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA try { // Unbind use cases before rebinding cameraProvider.unbindAll() // Bind use cases to camera cameraProvider.bindToLifecycle( this, cameraSelector, preview, imageCapture) } catch(exc: Exception) { Log.e(WebUtils.TAG, "Use case binding failed", exc) } }, ContextCompat.getMainExecutor(this)) } private fun getOutPutDirectory():File { val mediaDir=externalMediaDirs.firstOrNull()?.let {mFile-> File(mFile, resources.getString(R.string.app_name)).apply { mkdirs() } } return if(mediaDir!=null&& mediaDir.exists()) mediaDir else filesDir } private fun takePhoto() { // Get a stable reference of the modifiable image capture use case val imageCapture = imageCapture ?: return val photofile=File(outputdirectory,SimpleDateFormat(WebUtils.FILE_NAME_FORMAt, Locale.getDefault()) .format(System.currentTimeMillis())+".jpg") val outputOptions = ImageCapture.OutputFileOptions .Builder(photofile) .build() imageCapture.takePicture( outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback { override fun onError(exc: ImageCaptureException) { Log.e(WebUtils.TAG, "Photo capture failed: ${exc.message}", exc) } override fun onImageSaved(output: ImageCapture.OutputFileResults){ val msg = "Photo capture succeeded: ${output.savedUri}" val resultIntent = Intent() resultIntent.putExtra("key", Uri.fromFile(photofile)) // Replace "key" and "your_result_data" with the actual data to send back setResult(Activity.RESULT_OK, resultIntent); finish() } } ) }


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.