Camera相机类相关的几个流程方法
Camera.open(cameraId) 打开相机
camera.setDisplayOrientation(0) 设置相机水平方向
mCamera.setPreviewDisplay(holder) 在SurfaceHolder上显示画面
mCamera.setPreviewCallback(callback) 设置回调,将Yuv数据传递到onPreviewFrame方法
previewRate mParams = mCamera.getParameters() 获取相机相关参数
mCamera.stopPreview() 停止预览
mCamera.release() 释放相机
实现Camera.PreviewCallback接口获取Yuv视频流
@Overridepublic void onPreviewFrame(byte[] bytes, Camera camera) {//获取实时的Yuv数据流
}
实现Camera.PictureCallback接口实现拍照
private Camera.PictureCallback mPictureCallback = newCamera.PictureCallback() {
@Overridepublic void onPictureTaken(byte[] data, Camera camera) {
String pictureDir = Environment.getExternalStorageDirectory() + File.separator +"Videocmo/images";
String pictureName= DateFormat.format("yyyyMMddHHmmss",new Date()).toString()+ ".jpg";
String path=pictureDir+ File.separator +pictureName;try{
File file= newFile(pictureDir);if (!file.exists()) {
file.mkdirs();
}
FileOutputStream fos= newFileOutputStream(path);
fos.write(data);
fos.close();
}catch(FileNotFoundException ignored) {
}catch(IOException ignored) {
}
}
};
mCamera.takePicture(null, null, mPictureCallback);
寻找相机
private int findCamera(booleanisfront) {int cameraCount = 0;
Camera.CameraInfo cameraInfo= newCamera.CameraInfo();
cameraCount=Camera.getNumberOfCameras();for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);if(isfront) {//CAMERA_FACING_FRONT前置
if (cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT) {returncamIdx;
}
}else{//CAMERA_FACING_BACK后置
if (cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_BACK) {returncamIdx;
}
}
}return -1;
}
Camera.Parameters相机参数类
Camera.Parameters parameters = camera.getParameters(); //获取相机参数
List supportedPreviewSizes = parameters.getSupportedPreviewSizes(); //获取摄像头支持的各种分辨率
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片格式
parameters.setPreviewSize(witdh,height); //设置预览尺寸
parameters.setPictureSize(witdh,height); //设置分辨率
camera.setParameters(parameters);//提交相机参数
设置相机分辨率
private void initCamera(Camera mCamera){if(mCamera != null){try{
mParams=mCamera.getParameters();
Size previewSize= CamParaUtil.getInstance().getPropPreviewSize(mParams.getSupportedPreviewSizes(),1.333f, 640);
Log.d("log", String.valueOf(previewSize.width) + "-" +previewSize.height);
pWidth=previewSize.width;
pHeight=previewSize.height;
mParams.setPreviewSize(pWidth, pHeight);
List focusModes =mParams.getSupportedFocusModes();if(focusModes.contains("continuous-video")){
mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
mCamera.setParameters(mParams);
mCamera.startPreview();
isPreviewing= true;
mPreviwRate=previewRate;
}catch(Exception ex){
ex.printStackTrace();
}
}
}public Size getPropPreviewSize(List list, float th, intminWidth){
Collections.sort(list, sizeComparator);int i = 0;for(Size s:list){if((s.width >= minWidth) &&equalRate(s, th)){break;
}
i++;
}if(i ==list.size()){
}returnlist.get(i);
}
相关阅读