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

Android CameraX 仿一甜相机(录像、拍照、可调节尺寸、聚焦、照明、网格线),最全的CameraX教程 CameraX 是jetpack 组件库中的一个非常重要的API,不同于Camera和Camera2,CameraX 在api解耦性上做出了非常大的调整。以上的一些新增内容,足够我们去替换老板本的Camera或者Camera2 Api。由于本人的设备不支持扩展程序,所以就没有展示效果了,希望国能厂商能升级ROM 支持一下吧。3、绑定ImageCapture图形捕捉以及VideoCapture视频帧捕捉。基于以上的point 创建方式,可以封装为自动聚焦和手动聚焦。11、Extensions 扩展程序使用。. 阅读详情

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

一、手动对焦响应事件

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

mTextureView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public 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-预览、拍照、录像流程 重复模式(Repeating):指的是不断重复执行指定的 Capture 操作,当有其他模式的 Capture 提交时会暂停该模式,转而执行其他被模式的 Capture,当其他模式的 Capture 执行完毕后又会自动恢复继续执行该模式的 Capture,例如显示预览画面就是不断 Capture 获取每一帧画面。在 Camera2 上,你可以在规定的曝光时长范围内配置拍照的曝光时间,从而实现拍摄长曝光图片,你甚至可以延长每一帧预览画面的曝光时间让整个预览画面在暗环境下也能保证一定的亮度。 阅读详情

相关推荐

Android Camera2 拍照流程

摄像头管理器。这是一个全新的系统管理器,专门用于检测系统摄像头、打开系统摄像头。另外,调用CameraManager的getCameraCharacteristics(String cameraId)方法即可获取指定摄像头的相关特性。

2401_86391959的博客 1996

Android Camera2 API精讲

Android Camera2 API专题详细介绍Camera2的每一个API,带领大家深入浅出理解Camera2 API。Android 官方文档涉及到的Camera2 API都会有详细地介绍,并会配套实战代码让大家练手学习,同时也会补充很多在Camera实战过程中的宝贵经验。非常适合Android Camera App工作者。

第42讲 Android Camera2 API AF自动对焦

本讲是Android Camera专题系列的第42讲,我们介绍Android Camera2 API专题的AF自动对焦,包括如下内容: AF是什么 AF模式 AF状态 AF状态机 视频在线观看: 优快云:Android Camera2 API精讲--Android视频教程-移动开发-优快云程序员研修院 加入知识星球与更多Camera同学交流 – 星球名称:深入浅出Android Camera – 星球ID: 17296815 AF是什么 对焦: AF(自动对焦)和MF(手动对焦)

qq_42194101的博客 3262

第45讲 Android Camera2 API 手动对焦实战

本讲是Android Camera专题系列的第45讲,我们介绍Android Camera2 API专题的手动对焦实战,包括如下内容: 手动对焦(Manual Focus) 视频在线观看: 优快云:Android Camera2 API精讲--Android视频教程-移动开发-优快云程序员研修院 加入知识星球与更多Camera同学交流 – 星球名称:深入浅出Android Camera – 星球ID: 17296815 手动对焦(Manual Focus) 判断手动对焦是否支持 LENS_

qq_42194101的博客 3048

android-Camera2Basic 解析

1.Android Camera2介绍 Android 5.0(API Level 21) 重新设计了 Camera,废弃了之前的 Camera,改用现在的 Camera2 API,在Camera2上引入了Session/Request的概念,使用的复杂度远超之前的 Camera。 1.1 Camera2主要类简介 CameraManager:摄像头管理类,用于检测,打开系统摄像头,可以通过g...

pvpheroszw的博客 3673

CameraX学习1-关于预览、拍照、对焦

学习android camerax,记录的学习笔记。关于预览、拍照、对焦的知识点。

追风少年 1085

android 拍照 对焦,Android Camera2 拍照(四)——对焦模式

本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。一、手动对焦响应事件首先我们要实现点击preview区域进行手动对焦,这通过对TextureView注册touch事件实现。mTextureView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTou...

weixin_39879122的博客 812

Android自定义相机Camera实现手动对焦的方法示例

前言 我采用的是Camera来实现自定义相机的,如果你使用的是Camera2,那本文将不适用你。为了减少篇幅,本文主要讲解手动对焦的实现方式,前提是你已经能实现自定义相机的预览等基础功能。 目录 手动对焦的方法解析 实现用户点击屏幕后,设置对焦区域和测光区域  一、手动对焦的方法 手动对焦的实现主要通过两个Camera方法来进行配置: setFocusAreas 设置对焦的区域 setMeteringAreas 设置测光的区域 他们需要传入一个Camera.Area集合,Camera.Area如图: /** * Create an area with specifie

android 对焦模式,Android Camera2 拍照(四)——对焦模式

本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。一、手动对焦响应事件首先我们要实现点击preview区域进行手动对焦,这通过对TextureView注册touch事件实现。mTextureView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTou...

weixin_35715281的博客 1265

Android自定义相机实现自动对焦和手动对焦

Android自定义相机实现自动对焦和手动对焦: 不调用系统相机,因为不同的机器打开相机呈现的界面不统一也不能满足需求。 所以为了让程序在不同的机器上呈现出统一的界面,并且可以根据需求进行布局,做了此demo。 程序实现代码如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Method; import android.graphics.Pixe

AIDC供电系统与算电协同

AIDC供电系统的技术革新为算电协同提供了基础保障,而算电协同则是解决AIDC高能耗问题、推动数字经济可持续发展的关键路径

数据中心全生命周期价值管理 2570

Android Camera2 对焦梳理

转载:本文为优快云博主「vivianluomin」的原创文章,整理:york.zhou原文链接:https://blog.youkuaiyun.com/qq_36391075/article/det...

3933

价值投资/指标选股(akshare)

利用akshare的数据源,可以获取所有的股票数据以及公开的财务数据,可以进行条件筛选,获取满足条件的股票。 这套模板可以用于价值投资,指标选股。选股周期为日线级别。然后结果可以邮箱发送。 import time import akshare as ak ## A 股上市公司的实时行情数据 stock_zh_a_spot_df = ak.stock_zh_a_spot() #print(stock_zh_a_spot_df) ##取前300测试 ##取前300测试 df_stock =...

qq_26742269的博客 1万+

Android Camera2在textureView中的预览和拍照

在布局文件加入TextureView控件,然后实现监听事件。然后在OnResume()方法设置监听SurfaceTexture的事件。当SurfaceTexture准备好会回调SurfaceTextureListener的onSurfaceTextureAvailable()方法。@Override//当SurefaceTexture可用的时候,设置相机参数并打开相机。

weixin_42504805的博客 2780

自适应滤波算法综述

自适应滤波算法综述

xdzhujy的博客 5万+

COMSOL解的继承

COMSOL解的继承1. 应用场景2. 实现方法2.1. 添加研究步骤2.2. 引用研究 根据参考文献整理而来,原文见: http://blog.sina.com.cn/s/blog_4a0a8b5d010126w5.html https://www.zhihu.com/question/371867999/answer/1309194094 个人学习笔记,如有疏漏,欢迎补充 1. 应用场景 在COMSOL模拟中,一次求解之后往往遇到以下几种情况需要用到解的继承: 1)瞬态求解的继续运算。例如初始设定求解1

jessica0307的博客 1万+

Android Camera高级特性——手动对焦

对焦可以说是Camera最重要的基本的功能,也是最常用的基本功能。本文介绍Android Camera的几种对焦方式,并介绍手动对焦如何实现的。

矩阵实验室 7586

基于Stateflow的驱动电机控制系统模式管理与安全策略研究

摘要 本文基于Stateflow状态机建模工具,研究了驱动电机控制系统的模式管理架构与安全策略实现方法。通过分析电机控制系统的工作模式,设计了包含初始化、待机、校准、对齐、运行、故障、复位七种状态的有限状态机模型,并建立了三级故障处理机制和降额保护策略。基于Simulink/Stateflow搭建的仿真模型实现了模式切换逻辑和安全管理功能,验证了系统能够正确响应各类控制事件,故障处理机制可有效保护系统安全。研究成果为电动汽车电机控制系统的工程开发提供了参考。 关键词:Stateflow;驱动电机控制;模式管

AI的内部世界的博客 58
上一篇: Android Camera2 拍照(三)——切换摄像头,延时拍摄和闪光模式
下一篇: Android开发(1)——第一个NDK应用
hunter800421
博客等级 码龄22年 60粉丝 97原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值