Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一)

上一篇文章Camera2 API 采集视频并 SurfaceView、TextureView 预览
主要是想理清 Camera2 的结构,并简单介绍怎么使用TextureView、SurfaceView 预览数据。

其实Camera2除了结构比较复杂,使用起来没那么复杂,而且是官方强烈推荐,加上又支持了很多新特性,自然满怀欣喜地准备做下去,可是,后面发现了好多坑啊!很多资料不全而且很多手机都不支持FULL模式,手头上的MIUI也是,无奈只好转战Camera。

这篇文章比较简单,主要是camera采集数据结合textureview预览,下面内容包括:

  1. 使用并封装Camera的api
  2. 使用Textureview
  3. 实现Camera手动对焦、自动对焦
  4. 源码

其中最重要的就是:Camera的坑!!! 包括
如何处理预览变形拉伸?
如何选择合适的预览尺寸?
如何textureview坐标转化到camera坐标实现手动对焦?
如何自动对焦?

Camera使用流程

1 . 申请权限

使用Camera必须要申请注册权限,包括在manifest申明和android 5.0以上必须主动申请

<uses-permission android:name = "android.permission.CAMERA" />
<uses-feature android:name = "android.hardware.camera" />
<uses-feature android:name = "android.hardware.camera.autofocus" />

以及主动申请权限

ActivityCompat.requestPermissions(Activity activity, String[] permisstions, int requestCode);

自己封装了个PermisstionUtil工具类,可见后面的源码链接

2 . 打开Camera
 private static int mCameraID = Camera.CameraInfo.CAMERA_FACING_BACK; 
 // 默认是后置摄像头
 mCamera = Camera.open(mCameraID);
3. 预览camera

1.设置camera接收预览的输出,可以是SurfaceTexture或SurfaceHolder:

mCamera.setPreviewTexture(surfaceTexture);
mCamera.setPreviewDisplay(surfaceHolder);

2.设置camera的方向,因为camera默认是水平的,不设置方向会发现看到的图像是不对的。
网上很多人写 mCamera.setDisplayOrientation(90),直接旋转90度,如果是固定screenOrientation=“portrait”,好像也没有问题,不过这里个人参考了其他的代码,先找出屏幕方向再进行设置:

mOrientation = getCameraPreviewOrientation(activity, mCameraID);
mCamera.setDisplayOrientation(mOrientation); 
public static int getCameraPreviewOrientation(Activity activity, int cameraId) {
    if (mCamera == null) {
        throw new RuntimeException("mCamera is null");
    }
    Camera.CameraInfo info = new Camera.CameraInfo();
    Camera.getCameraInfo(cameraId, info);
    int result;
    int degrees = getRotation(activity);
    //前置
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
   
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值