2.33 Camera详解与架构

less than 1 minute read

2.33.1 Camera详解

  1. 打开Camera
  ...
  mCamera = Camera.open();
  ...
  // 开启预览
  SurfaceTexture surfaceTexture = new SurfaceTexture(textureId);
  mCamera.setPreviewTexture(surfaceTexture);
  mCamera.startPreview();

  // 只采集不渲染
  SurfaceTexture surfaceTexture = new SurfaceTexture(0);
  mCamera.setPreviewTexture(surfaceTexture);
  surfaceTexture.detachFromGLContext();
  mCamera.startPreview();
  1. 设置Camera参数
  Camera.Parameters params = mCamera.getParameters();
  List<Camera.Size> previewSizeList = params.getSupportedPreviewSizes();
  ...
  // 设置预览尺寸
  params.setPreviewSize(width, height);

  List<Camera.Size> pictureSizeList = params.getSupportedPictureSizes();
  // 设置摄像头的分辨率
  params.setPictureSize(width, height);

  // 设置对焦模式
  if (cameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
  }

  // 设置闪光灯
  params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
  1. 对焦
  List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
  focusAreas.add(new Camera.Area(rect, 1000));
  params.setFocusAreas(focusAreas);

  mCamera.cancelAutoFocus();
  mCamera.setParameters(params);
  mCamera.autoFocus(this);
  1. 拍照
  mCamera.takePicture(null, null, PictureCallback);
  1. 切换摄像头
  mCamera.stopPreview();
  mCamera.release();

  mCamera = Camera.open(cameraId);

  mCamera.setPreviewDisplay(holder);
  mCamera.startPreview();
  1. 打开闪光灯
  if (isOpen) {
    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
  } else {
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
  }

  mCamera.setParameters(params);

2.33.2 Camera优化

  • 启动优化

  • 预览优化

2.33.3 Camera架构

参考