原文:Android Camera2 拍照(四)——对焦模式

本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。

一、手动对焦响应事件

首先我们要实现点击preview区域进行手动对焦,这通过对TextureView注册touch事件实现。

mTextureView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int actionMasked = MotionEventCompat.getActionMasked(event);int fingerX, fingerY;int length = (int) (getResources().getDisplayMetrics().density * 80);switch (actionMasked) {case MotionEvent.ACTION_DOWN:fingerX = (int) event.getX();fingerY = (int) event.getY();LogUtil.d("onTouch: x->" + fingerX + ",y->" + fingerY);mIvFocus.setX(fingerX - length / 2);mIvFocus.setY(fingerY - length / 2);mIvFocus.setVisibility(View.VISIBLE);triggerFocusArea(fingerX, fingerY);break;}return false;}});
triggerFocusArea将实现手动对焦。

二、手动对焦实现

private void triggerFocusArea(float x, float y) {CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);try {CameraCharacteristics characteristics= manager.getCameraCharacteristics(mCameraId);Integer sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);sensorOrientation = sensorOrientation == null ? 0 : sensorOrientation;Rect cropRegion = AutoFocusHelper.cropRegionForZoom(characteristics, 1f);mAERegions = AutoFocusHelper.aeRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);mAFRegions = AutoFocusHelper.afRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);// Step 1: Request single frame CONTROL_AF_TRIGGER_START.CaptureRequest.Builder builder;builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.addTarget(mPreviewSurface);builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);mControlAFMode = AutoFocusMode.AUTO;builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);mCaptureSession.capture(builder.build(), mPreCaptureCallback, mBackgroundHandler);// Step 2: Call repeatingPreview to update mControlAFMode.sendRepeatPreviewRequest();resumeContinuousAFAfterDelay(DELAY_TIME_RESUME_CONTINUOUS_AF);} catch (CameraAccessException ex) {Log.e(TAG, "Could not execute preview request.", ex);}}

首先将对焦模式设置为AutoFocusMode.AUTO。AutoFocusMode是定义枚举类型,其定义如下:

enum AutoFocusMode {/*** System is continuously focusing.*/CONTINUOUS_PICTURE,/*** System is running a triggered scan.*/AUTO;int switchToCamera2FocusMode() {switch (this) {case CONTINUOUS_PICTURE:return CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;case AUTO:return CameraMetadata.CONTROL_AF_MODE_AUTO;default:return CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;}}}

用来实现自定义对焦模式和CameraMetadata中对焦模式的对应。其中AUTO即对应手动对焦

然后通过builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());将对焦模式切换为手动对焦。在确定定位区域之后,通过函sendRepeatPreviewRequest恢复到

CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;

源码参考:https://github.com/gengqifu/361Camera,欢迎fork/star。

Android Camera2 拍照(四)——对焦模式相关推荐

  1. Android camera2拍照旋转角度,以及镜像

    一.需要系统自带相机,拍照旋转90度. 路径:packages\apps\Camera2 找到三个CaptureRequest.JPEG_ORIENTATION ,修改为解决: rootBuilder ...

  2. Android Camera2拍照时照片拍出来特别暗

    最近在开发相机的过程中遇到这样一个问题,相机打开闪光灯后拍照后照片特别的暗,刚开始打算修改一些拍照时的参数,提高曝光率啊,延长曝光时长来改善照片问题 如一下思路 1.通过设置曝光时间范围(Captur ...

  3. android camera2拍照图像输出过慢,华为手机比较明显

    最近在camera2自定义相机拍照,在点击拍照按钮回调,在处理图像流的时候总是卡主 尤其是华为手机,几乎所有手机都会拍照后拿不到imageReader读取的image 然后我加了个300ms的延迟后, ...

  4. Android Camera2拍照录制工具

    工具类 import android.Manifest; import android.content.Context; import android.content.pm.PackageManage ...

  5. Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式

    一.切换摄像头 在前后摄像头之间切换,首先需要关闭之前打开的摄像头,关闭preview,之后重新打开新的摄像头,重新打开preview. public void switchCamera() {if ...

  6. android camera(6)---camera2 拍照流程

    android camera2 拍照流程 正文 camera2 API 的加入是从AndroidV5.0(21)开始的,因此我们使用Camera2应该是在Android 5.0(含5.0)之后.同时, ...

  7. 第3讲 Android Camera2 API 概述

    本讲是Android Camera专题系列的第3讲,我们介绍Android Camera2 API概述,了解Camera2 API的核心组件,以及他们如何交互来完成Camera各种流程. 视频在线观看 ...

  8. android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

  9. android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

最新文章

  1. 数据库启动时报ORA-00845错误解决方法
  2. 在Javascript中闭包(Closure)
  3. python中str是什么_Python中str字符串的功能介绍
  4. 在实际项目中,如何选择合适的机器学习模型?
  5. CPAL脚本自动化测试 ———— Test Report系列函数及使用
  6. 微信小程序毕业设计(一)
  7. Java常用命令与参数设置
  8. 千万不要用efficientnet做bone net
  9. 千万千万别裸辞,否则你已经死了
  10. 我的编程之路点滴记录(三)
  11. 响应式织梦模板装修装饰设计类网站
  12. 金融企业邮箱发推荐信,金融行业如何保障邮件安全?
  13. 阿里前端工程师面试题+解题思路
  14. 数据流代替工作流解决方案
  15. 如何删除本地和远程的 Git 分支
  16. REST API示例
  17. 转:新浪给微米定下了哪些要求?
  18. python文件粉碎传输,BAT版文件粉碎器
  19. html5中底部对齐怎么写,css设置元素底部垂直对齐
  20. 毕业设计-基于Springboot实现田径运动会管理系统

热门文章

  1. [BUUCTF-pwn]——warmup_csaw_2016
  2. HEVC-CABAC
  3. android 强制全屏,[Android]设置Activity为全屏显示的两种方法
  4. rust安装教程linux,如何在 Linux 中安装 Rust 编程语言
  5. 为什么喝酒有的人会脸红,有的人会脸发白
  6. angularJS 修改操作select回显选中的数据
  7. 9 README,全套代码
  8. java执行linux命令
  9. ASCII码对照表 转帖
  10. gdb来调式多线程(转)