gpt4 book ai didi

android - 在 CameraX 库中创建预览后,每次都需要 bindToLifecycle() 来切换 ON/OFF/AUTO 闪光灯

转载 作者:行者123 更新时间:2023-12-05 00:16:06 25 4
gpt4 key购买 nike

正如我从许多实现中了解到的,例如:

https://github.com/android/camera-samples/tree/master/CameraXBasic

https://proandroiddev.com/android-camerax-preview-analyze-capture-1b3f403a9395

在 CameraX 实现中的每个用例之后,都需要调用 cameraProvide.bindToLifecycle() 方法。

例如,如果我需要将相机的 FLASH_MODE 从默认OFF 模式切换为ON,则需要再次调用 bindToLifecycle() 方法。 p>

这种方法的缺点是,在一两秒钟内,预览会被删除并重新附加,这对应用来说并不是一个平滑的过渡。

是否有任何更好的做法可用,或者这是限制?

我在下面附上了示例代码:

   private void bindCameraUseCase() {
int screenAspectRatio = getAspectRatio(previewView.getWidth(), previewView.getHeight());
int rotation = previewView.getDisplay().getRotation();
preview = new Preview.Builder()
.setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(rotation)
.build();
cameraSelector = new CameraSelector.Builder()
.requireLensFacing(lensFacing)
.build();
imageCapture = new ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(rotation)
.setFlashMode(flashMode)
.build();
// Must unbind the use-cases before rebinding them
cameraProvider.unbindAll();
preview.setSurfaceProvider(previewView.createSurfaceProvider());
camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);
}

并切换手电筒:

    private void toggleFlash(){
Log.d(TAG, "toggleFlash: "+flashMode);
switch (flashMode){
case ImageCapture.FLASH_MODE_OFF:
flashMode = ImageCapture.FLASH_MODE_ON;
flashButton.setBackgroundResource(R.drawable.ic_flash_on_24dp);
break;
case ImageCapture.FLASH_MODE_ON:
flashMode = ImageCapture.FLASH_MODE_AUTO;
break;
case ImageCapture.FLASH_MODE_AUTO:
flashMode = ImageCapture.FLASH_MODE_OFF;
break;
}
bindCameraUseCase();
}

我使用的是 CameraX 版本 - 1.0.0-beta04

最佳答案

在创建 ImageCapture 实例并将其绑定(bind)到生命周期后,要在图像捕获期间启用或禁用闪光灯,您可以使用 ImageCapture.setFlashMode(boolean) .

关于您关于在绑定(bind) ImageCapture 用例之前和之后设置闪光模式之间的区别的问题,据我所知,确实没有太大区别。当您通过调用 ImageCapture.takePicture() 拍照时,会使用不同的配置参数构建捕获请求,其中之一是闪光模式。所以只要在这个调用(ImageCapture.takePicture())之前设置了闪光灯模式,捕获请求的输出应该是一样的。

CameraX 目前使用 Camera2,为了更好地了解拍照时如何设置闪光灯模式,您可以查看 CaptureRequest.FLASH_MODE .

关于android - 在 CameraX 库中创建预览后,每次都需要 bindToLifecycle() 来切换 ON/OFF/AUTO 闪光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62204461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com