Android Camera2开启自动曝光功能

 更新时间:2022年01月04日 14:35:37   作者:胡刚2021  
这篇文章主要为大家详细介绍了Android Camera2开启自动曝光功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android Camera2开启自动曝光功能的具体代码,供大家参考,具体内容如下

首先,打开3A的总开关:

CaptureRequest.Builder builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);

获取支持的 AE FPS Range:

List<int[]> ae_fps_ranges = new ArrayList<>();
for (Range<Integer> r : characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)) {
    ae_fps_ranges.add(new int[] {r.getLower(), r.getUpper()});
}
Collections.sort(ae_fps_ranges, new CameraController.RangeSorter());

然后,设置FPS:

builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, ae_target_fps_range);

最后,根据 Flash_Mode 设置 AE_MODE

switch(flash_value) {
   case "flash_off":
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
       break;
   case "flash_auto":
       // note we set this even in fake flash mode (where we manually turn torch on and off to simulate flash) so we
       // can read the FLASH_REQUIRED state to determine if flash is required
   /*if( use_fake_precapture || CameraController2.this.want_expo_bracketing )
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
   else*/
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
       //这里FLASH_MODE可以设置为任意值,因为AE_MODE优先级高
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
       break;
   case "flash_on":
       // see note above for "flash_auto" for why we set this even fake flash mode - arguably we don't need to know
       // about FLASH_REQUIRED in flash_on mode, but we set it for consistency...
   /*if( use_fake_precapture || CameraController2.this.want_expo_bracketing )
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
   else*/
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
       break;
   case "flash_torch":
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
       break;
   case "flash_red_eye":
       // not supported for expo bracketing or burst
       if( CameraController2.this.burst_type != BurstType.BURSTTYPE_NONE )
           builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
       else
           builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE);
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
       break;
   case "flash_frontscreen_auto":
   case "flash_frontscreen_on":
   case "flash_frontscreen_torch":
       builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
       builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
       break;
}

查看每帧的曝光参数:

CameraCaptureSession.CaptureCallback{
    @Override
    public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
        long capture_result_exposure_time = result.get(CaptureResult.SENSOR_EXPOSURE_TIME);
        long capture_result_sensitivity = result.get(CaptureResult.SENSOR_SENSITIVITY);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android WebView软键盘遮挡输入框方案详解

    Android WebView软键盘遮挡输入框方案详解

    这篇文章主要介绍了Android WebView软键盘遮挡输入框方案详解,本文提供了一种新的解决 WebView 输入框被软键盘遮挡的思路,不过这种思路也有它的局限性,目前来看仅适用于全屏的 WebView 中,需要的朋友可以参考下
    2022-06-06
  • Android添加音频的几种方法

    Android添加音频的几种方法

    今天小编就为大家分享一篇关于Android添加音频的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 最简单的SD卡文件遍历Android程序

    最简单的SD卡文件遍历Android程序

    这篇文章主要为大家详细介绍了最简单的SD卡文件遍历Android程序,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Toast和Handler的间隔使用实例

    Toast和Handler的间隔使用实例

    Toast和Handler的间隔使用实例,需要的朋友可以参考一下
    2013-05-05
  • Android 内存溢出和内存泄漏的问题

    Android 内存溢出和内存泄漏的问题

    这篇文章主要介绍了Android 内存溢出和内存泄漏的问题的相关资料,需要的朋友可以参考下
    2017-03-03
  • Kotlin协程之Flow的使用与原理解析

    Kotlin协程之Flow的使用与原理解析

    Flow是一种数据流,可以用于协程间的通信,具有冷、懒、响应式等特点,Flow是基于协程构建的,可以提供多个值,本文就来给大家讲讲Kotlin Flow使用与原理,需要的朋友可以参考下
    2023-09-09
  • Android中BroadcastReceiver案例讲解

    Android中BroadcastReceiver案例讲解

    今天小编就为大家分享一篇关于Android中BroadcastReceiver案例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android中EditText显示明文与密码的两种方式

    Android中EditText显示明文与密码的两种方式

    这篇文章主要介绍了Android中EditText显示明文与密码的两种方式,非常不错,具有参考借鉴价值,需要的盆友一起学习吧
    2016-08-08
  • Android view绘制流程详解

    Android view绘制流程详解

    View 的绘制是在 ViewRoot 的 performTraversals() 开始的,它历经 measure(测量), layout(布局), draw(绘制) 三个流程将 View 显示在屏幕上。
    2021-05-05
  • Android AIDL实现与服务相互调用方式

    Android AIDL实现与服务相互调用方式

    这篇文章主要介绍了Android AIDL实现与服务相互调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论