Skip to content

对 Camera 做的一些封装,简化 Camera 相关开发

Notifications You must be signed in to change notification settings

chendongMarch/LightCamera

Repository files navigation

#EasyCamera

##希望能很好的封装关于Camera的一系列操作,简化关于Camera的开发。 ###为了解决拍照延时的问题,采用了图片的拍摄和存储异步进行的方式。 ###支持照片拍摄(PIC,采用的是camera拍摄毁掉的方式)和快速连拍(FAST,采用的是预览获取帧然后处理的方式) ###支持照片自动旋转

###库代码链接 ##compile 'com.march.cameralibs:easycameralibs:1.0.7'

###在xml文件中使用

//参数说明
<declare-styleable name="CamContainerView">
        //是否在顶部显示遮挡,如果为true,切换到1:1时,会在顶部出现黑色遮挡物,如果为false,预览界面始终在屏幕顶端
        <attr name="isShowTop" format="boolean"/>
</declare-styleable>

//xml实例
<com.march.libs.mycamera.CamContainerView
        android:id="@+id/activity_mycamera_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        cam:isShowTop="true"/>

###创建Activity同步生命周期

	@Override
    protected void onResume() {
        super.onResume();
        CameraNative.getInst().onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        CameraNative.getInst().onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        CameraNative.getInst().onDestroy();
    }

###获取CameraNative实例并设置监听

//get the singleton of CameraNative
private CameraNative mCameraNative;
mCameraNative = CameraNative.getInst();

//设置保存图片的路径
mCameraNative.setSaveDir(new File(ImageUtils.getSystemDcimPath()));

//设置闪光灯监听,有三个回调可以自由实现,使用该回调方法可以自定义在开启闪光灯时的额外操作,比如弹窗提醒
mCameraNative.setOnFlashChangeListener(new CameraNative.OnFlashChangeListener() {
            @Override
            public boolean OnTurnFlashOn() {
            //your code
                   return true;
            }
});

//设置照片拍摄的监听的监听,将会实现三个方法用来检测图片的存储进度
mCameraNative.setOnSavePicListener(this);
@Override
public void InSaveProgress(int num, float percent) {
        L.info("正在存储 " + num + "  rate  " + percent);
        //由于拍摄和存储是异步进行的,在这里可以回调保存的进度
}
@Override
public void OnSaveOver() {
        L.info("保存完成");
        //保存完成,回调发生
}

//错误回调监听
mCameraNative.setOnErrorListener(new CameraNative.OnErrorListener() {
            @Override
            public void error(int errorCode,String errMsg) {
            //重大错误会使用错误回调交给开发者处理,比如相机没有获得权限无法打开,详细参照CameraConstant错误码

            }
        });

###闪光灯API

//切换闪光灯

//如果相机支持自动状态将会切换到自动状态,否则直接切换到关闭状态,是可以自适应的切换模式
//切换闪关灯状态,不涉及UI的变化
public void switchLightWithAuto()
//flashBtn ImageView 切换按钮 可以为空,为空时不切换
//res int[] 资源数组,长度必须是3,可以为空,为空时不切换
public void switchLightWithAuto(ImageView flashBtn, int... res)
eg:
mCameraNative.switchLightWithAuto(flashBtn,
                R.mipmap.camera_flashOn,
                 R.mipmap.camera_flashAuto,
                  R.mipmap.camera_flashOff);

//开启和关闭状态切换
//切换闪关灯状态,不涉及UI的变化
public void switchLight()
//flashBtn ImageView 切换按钮 可以为空,为空时不切换
//res int[] 资源数组,长度必须是2,可以为空,为空时不切换
public void switchLight(ImageView flashBtn, int... res)
eg:
mCameraNative.switchLight(flashBtn,
					R.mipmap.camera_flashOn,
						R.mipmap.camera_flashOff);

###照片大小API

//size参数:(CameraConstant.AutoSwitch,CameraConstant.Four2Three,CameraConstant.One2One)
//涉及UI的变化
public void switchPicSize(int size, ImageView iv, int... res)
//无关UI变化
public void switchPicSize(int size)
//获取当前照片大小设置
public int getCurrentSize()

###照片模式API

//mode参数:(CameraConstant.AutoSwitch,CameraConstant.MODE_PIC,CameraConstant.MODE_GIF)
//切换照片模式,两种模式
//MODE_PIC 照片模式,像素在300w以上
//MODE_GIF 连拍模式,相片像素600*800

//切换拍照模式,同时重新初始化相机
public void switchTakeMode(int mode)
public int getTakeMode()

###切换镜头API

//cameraId参数:(CameraConstant.AutoSwitch,CameraConstant.CAMERA_FACING_BACK,CameraConstant.CAMERA_FACING_FRONT)
//切换camera镜头方向
public boolean switchCameraFacing(int cameraId)

###拍照API

//拍照回调的接口,它不但是数据回调的接口也是对数据处理进行的参数配置,实现部分方法
public static abstract class OnTakePicListener {
         // 在操作过程中会返回data,由开发者自己做更多处理
        //当你想将它转化为bitmap时调用mCameraNative.handlePicData()方法进行转换
        public void onTakePic(byte[] data, CameraInfo info) {

        }

        //是否保存到本地,默认保存
        public boolean isSave2Local() {
             return true;
        }

        //采样的标准,根据二进制数据大小决定采样率默认是1
        public int getInSampleSize(byte[] data) {
            return 1;
        }
    }
//普通拍照
public boolean doTakePic(String fileName, OnTakePicListener listener)

//快速连拍
//开始连拍时调用doStartTakeFastPic()
public void doStartTakeFastPic()
//拍摄一张,使用listener获取拍摄的数据
public void doTakeFastPic(String fileName, OnTakePicListener listener)
//拍摄完毕停止连拍
public void doStopFastPic()

###图片处理API

//在外部处理byte数组,返回bitmap,比如回调public void onTakePic(byte[] data, CameraInfo info) 的数据
public Bitmap handlePicData(byte[] data, int sampleSize, CameraInfo info)

###其他

//由于存储照片是异步的,拍摄完毕之后需要调用doTakePicOver()方法,并在OnSaveOver()回调中执行相关操作
doTakePicOver()
//停止照片自定旋转,横屏拍摄的照片将不会自动横向显示
public void shutDownAutoRotate()
//记住上次的模式。不需要每次都设置
public void setAllowRememberLastTimeMode(boolean allowRememberLastTimeMode)
//关闭log
public void setLogEnable(boolean log)

###常用操作

public void clickBtn(View view) {
        switch (view.getId()) {
            case R.id.activity_mycamera_take:
                cameraNative.doTakePic(System.currentTimeMillis() + ".jpg", new CameraNative.OnTakePicListener() {
                    @Override
                    public void onTakePic(byte[] data, CameraInfo info) {
                        Bitmap bitmap = CameraNative.getInst().handlePicData(data, info);
                    }

                    @Override
                    public boolean isSave2Local() {
                        return true;
                    }

                    @Override
                    public int getInSampleSize(byte[] data) {
                        return 2;
                    }
                });
                break;
            case R.id.activity_mycamera_switch:
                cameraNative.switchCameraFacing(CameraConstant.AutoSwitch);
                break;
            case R.id.activity_mycamera_flash:
                cameraNative.switchLightWithAuto();
                break;
            case R.id.activity_mycamera_over:
                cameraNative.takePicOver();
                break;
            case R.id.activity_mycamera_mode:
                cameraNative.switchTakeMode(CameraConstant.AutoSwitch);
                break;
            case R.id.activity_mycamera_size:
                cameraNative.switchPicSize(CameraConstant.AutoSwitch);
                break;
        }

About

对 Camera 做的一些封装,简化 Camera 相关开发

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages