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 拍照(四)——对焦模式相关推荐
- Android camera2拍照旋转角度,以及镜像
一.需要系统自带相机,拍照旋转90度. 路径:packages\apps\Camera2 找到三个CaptureRequest.JPEG_ORIENTATION ,修改为解决: rootBuilder ...
- Android Camera2拍照时照片拍出来特别暗
最近在开发相机的过程中遇到这样一个问题,相机打开闪光灯后拍照后照片特别的暗,刚开始打算修改一些拍照时的参数,提高曝光率啊,延长曝光时长来改善照片问题 如一下思路 1.通过设置曝光时间范围(Captur ...
- android camera2拍照图像输出过慢,华为手机比较明显
最近在camera2自定义相机拍照,在点击拍照按钮回调,在处理图像流的时候总是卡主 尤其是华为手机,几乎所有手机都会拍照后拿不到imageReader读取的image 然后我加了个300ms的延迟后, ...
- Android Camera2拍照录制工具
工具类 import android.Manifest; import android.content.Context; import android.content.pm.PackageManage ...
- Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式
一.切换摄像头 在前后摄像头之间切换,首先需要关闭之前打开的摄像头,关闭preview,之后重新打开新的摄像头,重新打开preview. public void switchCamera() {if ...
- android camera(6)---camera2 拍照流程
android camera2 拍照流程 正文 camera2 API 的加入是从AndroidV5.0(21)开始的,因此我们使用Camera2应该是在Android 5.0(含5.0)之后.同时, ...
- 第3讲 Android Camera2 API 概述
本讲是Android Camera专题系列的第3讲,我们介绍Android Camera2 API概述,了解Camera2 API的核心组件,以及他们如何交互来完成Camera各种流程. 视频在线观看 ...
- android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...
- android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...
最新文章
- 数据库启动时报ORA-00845错误解决方法
- 在Javascript中闭包(Closure)
- python中str是什么_Python中str字符串的功能介绍
- 在实际项目中,如何选择合适的机器学习模型?
- CPAL脚本自动化测试 ———— Test Report系列函数及使用
- 微信小程序毕业设计(一)
- Java常用命令与参数设置
- 千万不要用efficientnet做bone net
- 千万千万别裸辞,否则你已经死了
- 我的编程之路点滴记录(三)
- 响应式织梦模板装修装饰设计类网站
- 金融企业邮箱发推荐信,金融行业如何保障邮件安全?
- 阿里前端工程师面试题+解题思路
- 数据流代替工作流解决方案
- 如何删除本地和远程的 Git 分支
- REST API示例
- 转:新浪给微米定下了哪些要求?
- python文件粉碎传输,BAT版文件粉碎器
- html5中底部对齐怎么写,css设置元素底部垂直对齐
- 毕业设计-基于Springboot实现田径运动会管理系统