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);
    }
}

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

(0)

相关推荐

  • android系统在静音模式下关闭camera拍照声音的方法

    话说为了防止偷拍,业内有不成文规定,手机公司在做camera时,点击拍照和录像键的时候,必须要有提示音.因此,google也就非常人性化的将播放拍照声音的函数,放到了cameraService中,防止开发者能开发出不响的camera,从而只要调用拍照函数,一定会响,这是写死在framework中的. 话说这个规定在当今有点不合时宜,这不,今天我收到测试提的一个BUG,说是公司的新需求,要求在静音模式下拍照声音也得取消.这么无耻的需求,也许就在我们中国最大的山寨手机公司才会提到.废话不多说,看看是

  • Android camera实时预览 实时处理,人脸识别示例

    Android camera实时预览 实时处理,面部认证. 预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,每次预览监听前五个数据帧,在处理做一个面部识别. 先看目录关系 自定义控件CameraSurfaceView.java 自定义接口方法CameraInterface.java CameraActivity预览界面. CameraSurfaceView.Java package com.centaur.camera.prev

  • Android编程中调用Camera时预览画面有旋转问题的解决方法

    本文实例讲述了Android编程中调用Camera时预览画面有旋转问题的解决方法.分享给大家供大家参考,具体如下: 在调用Camera写应用的时候,前后摄像头的情况有时候是不一样的.有时候,明明后摄像头没有问题,而调用到前摄像头时,却倒转了180°,或者其他角度,百思不得其解.在查看了Android源码之后,发现它的解决办法很是好,接下来贴个源码,以备日后查看. public static int getDisplayRotation(Activity activity) { int rotat

  • android之camera用法实例详解

    本文实例讲述了android之camera用法.分享给大家供大家参考.具体如下: 1.关于预览横竖差90度的问题 原因分析 经过查证和实验,可以证实:Android提供的SDK(android.hardware.Camera)里大概不能正常的使用竖屏(portrait layout)加载照相机,当用竖屏模式加载照相机时会产生以下情况: ①. 照相机成像左倾90度(倾斜): ②. 照相机成像长宽比例不对(失比). 之所以是"大概",原因是因为可能可以通过一些比较复杂的手段解决.如果以上成

  • Android实现Camera2预览和拍照效果

    简介 网上对于 Camera2 的介绍有很多,在 Github 上也有很多关于 Camera2 的封装库,但是对于那些库,封装性太强,有时候我们仅仅是需要个简简单单的拍照功能而已,因此,自定义一个 Camera 使之变得轻量级那是非常重要的了.(本文并非重复造轮子, 而是在于学习 Camera2API 的基本功能, 笔记之.) 学习要点: 使用 Android Camera2 API 的基本功能. 迭代连接到设备的所有相机的特征. 显示相机预览和拍摄照片. Camera2 API 为连接到 An

  • Android Camera是否支持变焦的判断方法总结

    最近老大交给了一个任务,说是要在本地视频端能够调节摄像头焦距. 碰到了一些问题: 1.手机支不支持摄像头变焦 2.系统自带摄像软件可以变焦,但是自己编写的程序不支持变焦, 这个问题网上也有很多童鞋碰到了: 复制代码 代码如下: public void setZoomIn(){     try{         params = camera.getParameters();         zoomValue +=5;         params.setZoom(zoomValue);    

  • Android Camera变焦编程步骤

    1.添加Camera权限 2.判断是否支持变焦 复制代码 代码如下: public boolean isSupportZoom()     {         boolean isSuppport = true;         if (mCamera.getParameters().isSmoothZoomSupported())         {             isSuppport = false;         }         return isSuppport;    

  • Android中使用Camera类编写手机拍照App的实例教程

    Camera是Android摄像头硬件的相机类,位于硬件包"android.hardware.Camera"下.它主要用于摄像头捕获图片.启动/停止预览图片.拍照.获取视频帧等,它是设备本地的服务,负责管理设备上的摄像头硬件. Camera既然用于管理设备上的摄像头硬件,那么它也为开发人员提供了相应的方法,并且这些方法大部分都是native的,用C++在底层实现,下面简单介绍一下Camera的一些方法: static Camera open():打开Camera,返回一个Camera实

  • Android自定义照相机Camera出现黑屏的解决方法

    本文实例讲述了Android自定义照相机Camera出现黑屏的解决方法.分享给大家供大家参考,具体如下: 对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的 parameters.setPreviewSize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的 例子: List<Size> sizes = parameters.getSupporte

  • Android变形(Transform)之Camera使用介绍

    引言 接Android变形(Transform)之Matrix,来总结下Camera的使用,Camera主要实现3D的变形,有转动,旋转等,Camera的源码是由Native(本地代码)实现,提供的接口也比较简单.官方的介绍:A camera instance can be used to compute 3D transformations and generate a matrix that can be applied, for instance, on a  Canvas. 效果图 原图

随机推荐