Android 当我使用代码“;imageCapture.takePicture”;CameraX公司
我正在尝试探索cameraX测试版 我被困在我的实现中。 imageCapture.takePicture()imageCapture为空Android 当我使用代码“;imageCapture.takePicture”;CameraX公司,android,kotlin,android-camerax,Android,Kotlin,Android Camerax,我正在尝试探索cameraX测试版 我被困在我的实现中。 imageCapture.takePicture()imageCapture为空 // Bind the CameraProvider to the LifeCycleOwner val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build() val cameraProviderFuture = Proc
// Bind the CameraProvider to the LifeCycleOwner
val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
// CameraProvider
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
// ImageCapture
imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
// A variable number of use-cases can be passed here -
// camera provides access to CameraControl & CameraInfo
camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture)
} catch(exc: Exception) {
Log.e("TAG", "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(this))
// Create output file to hold the image
photoFile = createFile(externalMediaDirs.first(), FILENAME, PHOTO_EXTENSION)
// Setup image capture metadata
val metadata = Metadata().apply {
// Mirror image when using the front camera
isReversedHorizontal = lensFacing == CameraSelector.LENS_FACING_FRONT
}
// Create output options object which contains file + metadata
outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile)
.setMetadata(metadata)
.build()
// Setup image capture listener which is triggered after photo has been taken
imageCapture?.takePicture(
outputOptions, cameraExecutor, object : ImageCapture.OnImageSavedCallback {
override fun onError(exc: ImageCaptureException) {
Log.e(TAG, "Photo capture failed: ${exc.message}", exc)
}
override fun onImageSaved(output: ImageCapture.OutputFileResults) {
val savedUri = output.savedUri ?: Uri.fromFile(photoFile)
Log.d(TAG, "Photo capture succeeded: $savedUri")
}
})
}
(我不使用onClickListener)
我的函数由服务调用
如果删除cameraProviderFuture.addListener(Runnable),则不会绑定到有效的相机
我使用camerax beta版本该
ImageCapture
用例目前无法单独工作。它必须与至少一个预览
或图像分析
用例结合使用。这可能会在camerax的未来版本中发生更改。现在,您可以在上查看文档
解决问题的一个简单方法是添加一个ImageAnalysis
用例,它的分析器可以立即关闭它接收到的图像
val imageAnalysis = ImageAnalysis.Builder()
.build()
.apply {
setAnalyzer(executor, ImageAnalysis.Analyzer { image ->
image.close()
})
}
// Then bind both the imageAnalysis and ImageCapture
cameraProvider.bindToLifecycle(this, cameraSelector, imageCapture, imageAnalysis)