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性能优化及性能优化工具

    Android性能优化及性能优化工具

    这篇文章主要给大家分享的是Android性能优化及性能优化工具,下面文字会围绕Android性能优化的相关资料详细的展开具体内容,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • Framework源码面试之activity启动流程

    Framework源码面试之activity启动流程

    这篇文章主要为大家介绍了Framework源码面试之activity启动流程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android网格视图GridView的使用

    Android网格视图GridView的使用

    网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现
    2016-01-01
  • Android如何使用Glide加载清晰长图

    Android如何使用Glide加载清晰长图

    这篇文章主要介绍了Android如何使用Glide加载清晰长图,帮助大家更好的理解和而学习使用Android开发,感兴趣的朋友可以了解下
    2021-03-03
  • Android 自定义View之倒计时实例代码

    Android 自定义View之倒计时实例代码

    这篇文章主要介绍了Android 自定义View之倒计时实例代码的相关资料,大多数app在注册的时候,都有一个获取验证码的按钮,点击后,访问接口,最终用户会收到短信验证码。为了不多次写这个获取验证码的接口,下面将它自定义成一个view,方便使用,需要的朋友可以参考下
    2017-04-04
  • Android实现微信右侧顶部下拉对话框

    Android实现微信右侧顶部下拉对话框

    这篇文章主要为大家详细介绍了Android实现微信右侧顶部下拉对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android Okhttp请求查询购物车的实例代码

    Android Okhttp请求查询购物车的实例代码

    下面小编就为大家分享一篇Android Okhttp请求查询购物车的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android异步消息处理机制实现原理详解

    Android异步消息处理机制实现原理详解

    这篇文章主要介绍了Android异步消息处理机制实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 解决android viewmodel 数据刷新异常的问题

    解决android viewmodel 数据刷新异常的问题

    这篇文章主要介绍了解决android viewmodel 数据刷新异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android录制语音文件wav转mp3的方法示例

    Android录制语音文件wav转mp3的方法示例

    这篇文章主要介绍了Android录制语音文件wav转mp3的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论