Android 自定义Camera(一)

本文介绍了如何在Android中从零开始实现一个自定义相机。主要内容包括获取和释放相机、设置SurfaceHolder,以及处理相机预览和拍照时的尺寸匹配问题。文章中提到的CameraUtil工具类帮助解决了一些设备上的预览旋转问题,并提供了源码链接。
摘要由CSDN通过智能技术生成

公司一直在做一款好玩的应用名叫Funny, 是一个以萌和可爱为主的图片社区,P图工具(欢迎大家下载玩耍哈),刚开始调用的相机是调用系统的相机, 这肯定不能满足一款应用的需求,So我开始了从零的自定义相机,发现github csdn等等上面关于自定义相机的资料不是很多,当然也有比较好的,这里我也是从开始能预览到后面的一些细节处理踩了一些坑,我会一步一步的分享粗来,大家也看到了这篇是Camera(一), 现在谷歌开始推荐使用Camera2了 , 我后续也会继续研究,然后写出来, 下面就开始从头开始做个自己的相机吧。

获取相机和释放相机

首先相机实例只能有一个,拍照之后一定要释放,那么它也有了自己的生命周期, 首先获取相机,这里传入一个ID,这个id可以设前置摄像头和后置摄像头,后面博客我会加入代码

/**
     * 获取Camera实例
     * @return
     */
    private Camera getCamera(int id){
        Camera camera = null;
        try{
            camera = Camera.open(id);
        }catch (Exception e){

        }
        return camera;
    }

/**
     * 释放相机资源
     */
    private void releaseCamera(){
        if(mCamera != null){
            mCamera.setPreviewCallback(null);
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }
    }

使用之后释放相机资源,这里这样写是有原因的,一步都不能少,我有时候会忘记写mCamera.setPreviewCallback(null); 会报Method called after release 错误, 因为相机要实时的预览,那普通的View就不能满足绘制的要求了,这里要用的一个双缓冲机制的SurfaceView,下面我们要做的就是将Camera和SurfaceView绑定起来, 那就需要另一个类了 SurfaceHolder, 这里要特别提的是CameraUtil.getInstance().setCameraDisplayOrientation(this, mCameraId, camera); , 后面我会把源码地址写上, 由于安卓系统默认预览都是横着的,基本操作的是camera.setDisplayO

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值