前言:
从android5.0以来,新增了Camera2 API/ 但由于项目需求需要对Camera进行开发一个功能,废话不多说请看下面的书面语。仅供参考不存在指导意义、望见谅。
Camera camera;
在开始Camera开发之前先普及一下Camera能做到的功能有哪些,
开启、camera.open();
关闭、camera.stopPreview();
旋转预览画面 camera.setDisplyOrientation(int)正常的都需要旋转90
获取拍摄的照片takePicture( shutterCallback,rawCallback,jpegCallback)
Camera.Parameters parameters;
设置图片的格式 parameters.setPictureFormat(PixelFormat.常量)系统默认是
设置照片的大小 parameters.setPictureSize(with,height); 需要获取支持的参数 parameters .getSupportedPictureSizes();
设置预览大小(分辨率大小) paramnters.setPreviewSize(with,height); 需要获取可用的参数 parameters.getSupportedPreviewSize();
对焦 parameters.ssetFocusMode(parameters.常量);
闪光灯 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);//FLASH_MODE_OFF
焦距(即镜头的远近)parameters.setZoom(int); //设置之前最好获取一下Zoom的范围 不同的机子的摄像头Zoom不一样
设置拍照场景 parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_DAYLIGHT);
其他的功能就不一一列举了,自行百度,
最后将parameters 设置到camera里面 camera.setParameters(parameters);
开启预览 camera.startPreview();
设置自动对焦 camera.autoFocus(new Camera.AutoFocusCallback(){});
最后说一点,就是设置预览大小时,参数必须是获取的参数列表里面有的,否则出现设置异常、预览如果变形是SurfaceView的大小设置和 预览大小设置 和照片的大小设置有关、他们之间的比例需要一致。
关于Camera回传 出现的回传对象byte[ ] data重用
camera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { //Log.w("PREVIEWS","data3 ="+data.length+" "+isSave);//System.currentTimeMillis()+ if(isSave){ numberData++; mSaveByte = new byte[data.length]; mSaveByte = data.clone(); //mSaveByte = data; saveBytes.add(mSaveByte); Log.w("PREVIEWS","numberData= "+numberData+"data = "+data+" mSaveByte"+mSaveByte+ " time ="+System.currentTimeMillis()); //handler.sendEmptyMessage(MSG_VALUE_SAVE_PNG); } camera.addCallbackBuffer(data); } });