android.hardware.Camera#setParameters ( )源码实例Demo

下面列出了android.hardware.Camera#setParameters ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Pix-Art-Messenger   文件: CameraManager.java
private static void setTorchEnabled(final Camera camera, final boolean enabled) {
    final Camera.Parameters parameters = camera.getParameters();

    final List<String> supportedFlashModes = parameters.getSupportedFlashModes();
    if (supportedFlashModes != null) {
        final String flashMode;
        if (enabled)
            flashMode = findValue(supportedFlashModes, Camera.Parameters.FLASH_MODE_TORCH,
                    Camera.Parameters.FLASH_MODE_ON);
        else
            flashMode = findValue(supportedFlashModes, Camera.Parameters.FLASH_MODE_OFF);

        if (flashMode != null) {
            camera.cancelAutoFocus(); // autofocus can cause conflict

            parameters.setFlashMode(flashMode);
            camera.setParameters(parameters);
        }
    }
}
 
源代码2 项目: phoenix   文件: Camera1Manager.java
private void setCameraPhotoQuality(Camera camera) {
    final Camera.Parameters parameters = camera.getParameters();

    parameters.setPictureFormat(PixelFormat.JPEG);

    if (configurationProvider.getMediaQuality() == Configuration.MEDIA_QUALITY_LOW) {
        parameters.setJpegQuality(50);
    } else if (configurationProvider.getMediaQuality() == Configuration.MEDIA_QUALITY_MEDIUM) {
        parameters.setJpegQuality(75);
    } else if (configurationProvider.getMediaQuality() == Configuration.MEDIA_QUALITY_HIGH) {
        parameters.setJpegQuality(100);
    } else if (configurationProvider.getMediaQuality() == Configuration.MEDIA_QUALITY_HIGHEST) {
        parameters.setJpegQuality(100);
    }
    parameters.setPictureSize(photoSize.getWidth(), photoSize.getHeight());

    camera.setParameters(parameters);
}
 
源代码3 项目: green_android   文件: CameraManager.java
private static void setTorchEnabled(final Camera camera, final boolean enabled) {
    final Camera.Parameters parameters = camera.getParameters();

    final List<String> supportedFlashModes = parameters.getSupportedFlashModes();
    if (supportedFlashModes != null) {
        final String flashMode;
        if (enabled)
            flashMode = findValue(supportedFlashModes, Camera.Parameters.FLASH_MODE_TORCH,
                    Camera.Parameters.FLASH_MODE_ON);
        else
            flashMode = findValue(supportedFlashModes, Camera.Parameters.FLASH_MODE_OFF);

        if (flashMode != null) {
            camera.cancelAutoFocus(); // autofocus can cause conflict

            parameters.setFlashMode(flashMode);
            camera.setParameters(parameters);
        }
    }
}
 
源代码4 项目: TextOcrExample   文件: CameraUtil.java
/**
 * 打开闪关灯
 */
public void turnLightOn(Camera mCamera) {
    if (mCamera == null) {
        return;
    }
    Camera.Parameters parameters = mCamera.getParameters();
    if (parameters == null) {
        return;
    }
    List<String> flashModes = parameters.getSupportedFlashModes();
    // Check if camera flash exists
    if (flashModes == null) {
        // Use the screen as a flashlight (next best thing)
        return;
    }
    String flashMode = parameters.getFlashMode();
    if (!Camera.Parameters.FLASH_MODE_ON.equals(flashMode)) {
        // Turn on the flash
        if (flashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            mCamera.setParameters(parameters);
        } else {
        }
    }
}
 
源代码5 项目: sandriosCamera   文件: Camera1Manager.java
private void setCameraPhotoQuality(Camera camera) {
    Camera.Parameters parameters = camera.getParameters();

    parameters.setPictureFormat(PixelFormat.JPEG);

    if (configurationProvider.getMediaQuality() == CameraConfiguration.MEDIA_QUALITY_LOW) {
        parameters.setJpegQuality(50);
    } else if (configurationProvider.getMediaQuality() == CameraConfiguration.MEDIA_QUALITY_MEDIUM) {
        parameters.setJpegQuality(75);
    } else if (configurationProvider.getMediaQuality() == CameraConfiguration.MEDIA_QUALITY_HIGH) {
        parameters.setJpegQuality(100);
    } else if (configurationProvider.getMediaQuality() == CameraConfiguration.MEDIA_QUALITY_HIGHEST) {
        parameters.setJpegQuality(100);
    }
    parameters.setPictureSize(photoSize.getWidth(), photoSize.getHeight());

    camera.setParameters(parameters);
}
 
源代码6 项目: RecordVideo   文件: CameraPreview.java
public boolean manualFocus(Camera camera, Camera.AutoFocusCallback cb, List<Camera.Area> focusAreas
        ,List<Camera.Area> mFocusAreas) {
    //判断系统是否是4.0以上的版本
    if (camera != null && focusAreas != null && SystemVersionUtil.hasICS()) {
        try {
            camera.cancelAutoFocus();
            Camera.Parameters parameters = camera.getParameters();
            if(parameters != null){
                // getMaxNumFocusAreas检测设备是否支持
                if (parameters.getMaxNumFocusAreas() > 0) {
                    parameters.setFocusAreas(focusAreas);
                }
                // getMaxNumMeteringAreas检测设备是否支持
                if (parameters.getMaxNumMeteringAreas() > 0)
                    parameters.setMeteringAreas(mFocusAreas);
                parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
                camera.setParameters(parameters);
                camera.autoFocus(cb);
                return true;
            }
        } catch (Exception e) {
            if (e != null)
                Log.e(" ", "autoFocus", e);
        }
    }
    return false;
}
 
源代码7 项目: Roid-Library   文件: CameraConfigurationManager.java
/**
 * Sets the camera up to take preview images which are used for both
 * preview and decoding. We detect the preview format here so that
 * buildLuminanceSource() can build an appropriate LuminanceSource
 * subclass. In the future we may want to force YUV420SP as it's the
 * smallest, and the planar Y can be used for barcode scanning without a
 * copy in some cases.
 */
void setDesiredCameraParameters(Camera camera) {
    Camera.Parameters parameters = camera.getParameters();
    Log.d(TAG, "Setting preview size: " + cameraResolution);
    parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
    setFlash(parameters);
    setZoom(parameters);
    // setSharpness(parameters);
    // modify here
    camera.setDisplayOrientation(90);
    camera.setParameters(parameters);
}
 
/**
 * Sets the camera up to take preview images which are used for both preview
 * and decoding. We detect the preview format here so that
 * buildLuminanceSource() can build an appropriate LuminanceSource subclass.
 * In the future we may want to force YUV420SP as it's the smallest, and the
 * planar Y can be used for barcode scanning without a copy in some cases.
 */
void setDesiredCameraParameters(Camera camera) {
	Camera.Parameters parameters = camera.getParameters();
	Log.d(TAG, "Setting preview size: " + cameraResolution);
	parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
	setFlash(parameters);
	setZoom(parameters);
	// setSharpness(parameters);
	// modify here
	camera.setDisplayOrientation(270);
	camera.setParameters(parameters);
}
 
源代码9 项目: StarBarcode   文件: CameraConfigManager.java
/**
 * 设置预期的相机参数
 * @param camera
 */
void setDesiredCameraParameters(OpenCamera camera) {
    Camera theCamera = camera.getCamera();
    Camera.Parameters parameters = theCamera.getParameters();
    parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
    theCamera.setParameters(parameters);
    theCamera.setDisplayOrientation(cwNeededRotation);
}
 
void setTorch(Camera camera, boolean newSetting) {
    Camera.Parameters parameters = camera.getParameters();
    doSetTorch(parameters, newSetting);
    camera.setParameters(parameters);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    boolean currentSetting = prefs.getBoolean(PreferencesActivity.KEY_TOGGLE_LIGHT, false);
    if (currentSetting != newSetting) {
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean(PreferencesActivity.KEY_TOGGLE_LIGHT, newSetting);
        editor.commit();
    }
}
 
源代码11 项目: Android   文件: CameraConfigurationManager.java
public void setDesiredCameraParameters(Camera camera, boolean safeMode) {
	Camera.Parameters parameters = camera.getParameters();

	if (parameters == null) {
		Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
		return;
	}

	Log.i(TAG, "Initial camera parameters: " + parameters.flatten());

	if (safeMode) {
		Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
	}

	parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
	camera.setParameters(parameters);

	Camera.Parameters afterParameters = camera.getParameters();
	Camera.Size afterSize = afterParameters.getPreviewSize();
	if (afterSize != null && (cameraResolution.x != afterSize.width || cameraResolution.y != afterSize.height)) {
		Log.w(TAG, "Camera said it supported preview size " + cameraResolution.x + 'x' + cameraResolution.y + ", but after setting it, preview size is " + afterSize.width + 'x' + afterSize.height);
		cameraResolution.x = afterSize.width;
		cameraResolution.y = afterSize.height;
	}

	/** Set camera preview for vertical screen */
	camera.setDisplayOrientation(90);
}
 
源代码12 项目: ShaderEditor   文件: CameraListener.java
private boolean startPreview(Camera camera) {
	if (pausing || camera == null) {
		return false;
	}

	camera.setDisplayOrientation(frameOrientation);

	Camera.Parameters parameters = camera.getParameters();
	parameters.setRotation(frameOrientation);
	setPreviewSize(parameters);
	setFastestFps(parameters);
	setFocusMode(parameters);
	camera.setParameters(parameters);

	surfaceTexture = new SurfaceTexture(cameraTextureId);
	surfaceTexture.setOnFrameAvailableListener(
			new SurfaceTexture.OnFrameAvailableListener() {
				@Override
				public void onFrameAvailable(SurfaceTexture st) {
					synchronized (CameraListener.this) {
						available = true;
					}
				}
			});

	try {
		camera.setPreviewTexture(surfaceTexture);
	} catch (IOException e) {
		return false;
	}

	cam = camera;
	camera.startPreview();
	return true;
}
 
源代码13 项目: ScanZbar   文件: CameraManager.java
/**
 * Opens the camera driver and initializes the hardware parameters.
 * <p>
 * <p>
 * The surface object which the camera will draw preview frames
 * into.
 *
 * @throws IOException Indicates the camera driver failed to open.
 */
public synchronized void openDriver(SurfaceHolder holder) throws IOException {
    Camera theCamera = camera;
    if (theCamera == null) {
        theCamera = Camera.open();
        if (theCamera == null) {
            throw new IOException();
        }
        camera = theCamera;
    }
    // 设置摄像头预览view
    theCamera.setPreviewDisplay(holder);

    if (!initialized) {
        initialized = true;
        configManager.initFromCameraParameters(theCamera);
    }

    Camera.Parameters parameters = theCamera.getParameters();
    String parametersFlattened = parameters == null ? null : parameters.flatten(); // Save
    // temporarily
    try {
        configManager.setDesiredCameraParameters(theCamera, false);
    } catch (RuntimeException re) {
        // Driver failed
        Log.w(TAG, "Camera rejected parameters. Setting only minimal safe-mode parameters");
        Log.i(TAG, "Resetting to saved camera params: " + parametersFlattened);
        // Reset:
        if (parametersFlattened != null) {
            parameters = theCamera.getParameters();
            parameters.unflatten(parametersFlattened);
            try {
                theCamera.setParameters(parameters);
                configManager.setDesiredCameraParameters(theCamera, true);
            } catch (RuntimeException re2) {
                // Well, darn. Give up
                Log.w(TAG, "Camera rejected even safe-mode parameters! No configuration");
            }
        }
    }

}
 
/**
 * Opens the camera driver and initializes the hardware parameters.
 * 
 * @param holder
 *            The surface object which the camera will draw preview frames
 *            into.
 * @throws IOException
 *             Indicates the camera driver failed to open.
 */
public synchronized void openDriver(SurfaceHolder holder) throws IOException {
	Camera theCamera = camera;
	if (theCamera == null) {

		if (requestedCameraId >= 0) {
			theCamera = OpenCameraInterface.open(requestedCameraId);
		} else {
			theCamera = OpenCameraInterface.open();
		}

		if (theCamera == null) {
			throw new IOException();
		}
		camera = theCamera;
	}
	theCamera.setPreviewDisplay(holder);

	if (!initialized) {
		initialized = true;
		configManager.initFromCameraParameters(theCamera);
	}

	Camera.Parameters parameters = theCamera.getParameters();
	String parametersFlattened = parameters == null ? null : parameters.flatten(); // Save
																					// these,
																					// temporarily
	try {
		configManager.setDesiredCameraParameters(theCamera, false);
	} catch (RuntimeException re) {
		// Driver failed
		Log.w(TAG, "Camera rejected parameters. Setting only minimal safe-mode parameters");
		Log.i(TAG, "Resetting to saved camera params: " + parametersFlattened);
		// Reset:
		if (parametersFlattened != null) {
			parameters = theCamera.getParameters();
			parameters.unflatten(parametersFlattened);
			try {
				theCamera.setParameters(parameters);
				configManager.setDesiredCameraParameters(theCamera, true);
			} catch (RuntimeException re2) {
				// Well, darn. Give up
				Log.w(TAG, "Camera rejected even safe-mode parameters! No configuration");
			}
		}
	}

}
 
源代码15 项目: reacteu-app   文件: CameraConfigurationManager.java
void setDesiredCameraParameters(Camera camera, boolean safeMode) {
  // Checkout screen orientation
  int rotation = context.getApplicationContext().getResources().getConfiguration().orientation;

  WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  Display display = windowManager.getDefaultDisplay();
  int deviceSpecificRotation = display.getRotation();

  if (rotation == Configuration.ORIENTATION_PORTRAIT) {
    if (deviceSpecificRotation == Surface.ROTATION_0 || deviceSpecificRotation == Surface.ROTATION_90) {
      camera.setDisplayOrientation(90);
    } else {
      camera.setDisplayOrientation(270);
    }
  } else {
    // landscape
    if (deviceSpecificRotation == Surface.ROTATION_180 || deviceSpecificRotation == Surface.ROTATION_270) {
      camera.setDisplayOrientation(180);
    }
  }

  Camera.Parameters parameters = camera.getParameters();

  if (parameters == null) {
    Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
    return;
  }

  Log.i(TAG, "Initial camera parameters: " + parameters.flatten());

  if (safeMode) {
    Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
  }

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

  initializeTorch(parameters, prefs, safeMode);

  String focusMode = null;
  if (prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true)) {
    if (safeMode || prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, false)) {
      focusMode = findSettableValue(parameters.getSupportedFocusModes(),
          Camera.Parameters.FOCUS_MODE_AUTO);
    } else {
      focusMode = findSettableValue(parameters.getSupportedFocusModes(),
          "continuous-picture", // Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE in 4.0+
          "continuous-video",   // Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO in 4.0+
          Camera.Parameters.FOCUS_MODE_AUTO);
    }
  }
  // Maybe selected auto-focus but not available, so fall through here:
  if (!safeMode && focusMode == null) {
    focusMode = findSettableValue(parameters.getSupportedFocusModes(),
        Camera.Parameters.FOCUS_MODE_MACRO,
        "edof"); // Camera.Parameters.FOCUS_MODE_EDOF in 2.2+
  }
  if (focusMode != null) {
    parameters.setFocusMode(focusMode);
  }

  parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
  camera.setParameters(parameters);
}
 
源代码16 项目: ViseFace   文件: FaceUtil.java
/**
 * 在摄像头启动前设置参数
 *
 * @param cameraPreview
 * @param faceDetector
 * @param camera
 * @param cameraId
 * @param width
 * @param height
 * @param <T>
 */
public static <T> int setCameraParams(CameraPreview cameraPreview, IFaceDetector<T> faceDetector, Camera camera,
                                      int cameraId, int width, int height) {
    if (camera == null) {
        return 0;
    }
    // 获取摄像头支持的pictureSize列表
    Camera.Parameters parameters = camera.getParameters();
    List<Camera.Size> pictureSizeList = parameters.getSupportedPictureSizes();
    // 从列表中选择合适的分辨率
    Point pictureSize = FaceUtil.findBestResolution(pictureSizeList, new Point(width, height), true, 0.15f);
    // 根据选出的PictureSize重新设置SurfaceView大小
    parameters.setPictureSize(pictureSize.x, pictureSize.y);

    // 获取摄像头支持的PreviewSize列表
    List<Camera.Size> previewSizeList = parameters.getSupportedPreviewSizes();
    Point preSize = FaceUtil.findBestResolution(previewSizeList, new Point(width, height), false, 0.15f);
    parameters.setPreviewSize(preSize.x, preSize.y);

    float w = preSize.x;
    float h = preSize.y;
    float scale = 1.0f;
    int tempW = (int) (height * (h / w));
    int tempH = (int) (width * (w / h));
    if (cameraPreview != null) {
        if (tempW >= width) {
            cameraPreview.setLayoutParams(new FrameLayout.LayoutParams(tempW, height));
            scale = tempW / h;
        } else if (tempH >= height) {
            cameraPreview.setLayoutParams(new FrameLayout.LayoutParams(width, tempH));
            scale = tempH / w;
        } else {
            cameraPreview.setLayoutParams(new FrameLayout.LayoutParams(width, height));
        }
    }
    if (faceDetector != null) {
        faceDetector.setZoomRatio(5f * scale);
        faceDetector.setPreviewWidth((int) w);
        faceDetector.setPreviewHeight((int) h);
    }

    parameters.setJpegQuality(100);
    if (parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
        // 连续对焦
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
    }
    camera.cancelAutoFocus();
    int displayOrientation = setCameraDisplayOrientation(cameraPreview.getContext(), faceDetector, camera, cameraId);
    camera.setParameters(parameters);
    return displayOrientation;
}
 
源代码17 项目: QRScanner   文件: CameraManager.java
/**
 * Opens the camera driver and initializes the hardware parameters.
 *
 * @param holder The surface object which the camera will draw preview frames
 *               into.
 * @throws IOException Indicates the camera driver failed to open.
 */
public synchronized void openDriver(SurfaceHolder holder) throws IOException {
    Camera theCamera = camera;
    if (theCamera == null) {

        if (requestedCameraId >= 0) {
            theCamera = OpenCameraInterface.open(requestedCameraId);
        } else {
            theCamera = OpenCameraInterface.open();
        }

        if (theCamera == null) {
            throw new IOException();
        }
        camera = theCamera;
    }
    theCamera.setPreviewDisplay(holder);

    if (!initialized) {
        initialized = true;
        configManager.initFromCameraParameters(theCamera);
    }

    Camera.Parameters parameters = theCamera.getParameters();
    String parametersFlattened = parameters == null ? null : parameters.flatten(); // Save
    // these,
    // temporarily
    try {
        configManager.setDesiredCameraParameters(theCamera, false);
    } catch (RuntimeException re) {
        // Driver failed
        Log.w(TAG, "Camera rejected parameters. Setting only minimal safe-mode parameters");
        Log.i(TAG, "Resetting to saved camera params: " + parametersFlattened);
        // Reset:
        if (parametersFlattened != null) {
            parameters = theCamera.getParameters();
            parameters.unflatten(parametersFlattened);
            try {
                theCamera.setParameters(parameters);
                configManager.setDesiredCameraParameters(theCamera, true);
            } catch (RuntimeException re2) {
                // Well, darn. Give up
                Log.w(TAG, "Camera rejected even safe-mode parameters! No configuration");
            }
        }
    }

}
 
源代码18 项目: trust-wallet-android-source   文件: CameraSource.java
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }
    Camera camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode + " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode + " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}
 
void setDesiredCameraParameters(OpenCamera camera, boolean safeMode) {

    Camera theCamera = camera.getCamera();
    Camera.Parameters parameters = theCamera.getParameters();

    if (parameters == null) {
      Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
      return;
    }

    Log.i(TAG, "Initial camera parameters: " + parameters.flatten());

    if (safeMode) {
      Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
    }

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

    initializeTorch(parameters, prefs, safeMode);

    CameraConfigurationUtils.setFocus(
        parameters,
        prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true),
        prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, true),
        safeMode);

    if (!safeMode) {
      if (prefs.getBoolean(PreferencesActivity.KEY_INVERT_SCAN, false)) {
        CameraConfigurationUtils.setInvertColor(parameters);
      }

      if (!prefs.getBoolean(PreferencesActivity.KEY_DISABLE_BARCODE_SCENE_MODE, true)) {
        CameraConfigurationUtils.setBarcodeSceneMode(parameters);
      }

      if (!prefs.getBoolean(PreferencesActivity.KEY_DISABLE_METERING, true)) {
        CameraConfigurationUtils.setVideoStabilization(parameters);
        CameraConfigurationUtils.setFocusArea(parameters);
        CameraConfigurationUtils.setMetering(parameters);
      }

    }

    parameters.setPreviewSize(bestPreviewSize.x, bestPreviewSize.y);

    theCamera.setParameters(parameters);

    theCamera.setDisplayOrientation(cwRotationFromDisplayToCamera);

    Camera.Parameters afterParameters = theCamera.getParameters();
    Camera.Size afterSize = afterParameters.getPreviewSize();
    if (afterSize != null && (bestPreviewSize.x != afterSize.width || bestPreviewSize.y != afterSize.height)) {
      Log.w(TAG, "Camera said it supported preview size " + bestPreviewSize.x + 'x' + bestPreviewSize.y +
          ", but after setting it, preview size is " + afterSize.width + 'x' + afterSize.height);
      bestPreviewSize.x = afterSize.width;
      bestPreviewSize.y = afterSize.height;
    }
  }
 
源代码20 项目: Document-Scanner   文件: CameraSource.java
/**
 * Opens the camera and applies the user settings.
 *
 * @throws RuntimeException if the method fails
 */
@SuppressLint("InlinedApi")
private Camera createCamera() {
    int requestedCameraId = getIdForRequestedCamera(mFacing);
    if (requestedCameraId == -1) {
        throw new RuntimeException("Could not find requested camera.");
    }

    Camera camera;
    camera = Camera.open(requestedCameraId);

    SizePair sizePair = selectSizePair(camera, mRequestedPreviewWidth, mRequestedPreviewHeight);
    if (sizePair == null) {
        throw new RuntimeException("Could not find suitable preview size.");
    }
    Size pictureSize = sizePair.pictureSize();
    mPreviewSize = sizePair.previewSize();

    int[] previewFpsRange = selectPreviewFpsRange(camera, mRequestedFps);
    if (previewFpsRange == null) {
        throw new RuntimeException("Could not find suitable preview frames per second range.");
    }

    Camera.Parameters parameters = camera.getParameters();

    if (pictureSize != null) {
        parameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
    }

    parameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    parameters.setPreviewFpsRange(
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
            previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
    parameters.setPreviewFormat(ImageFormat.NV21);

    setRotation(camera, parameters, requestedCameraId);

    if (mFocusMode != null) {
        if (parameters.getSupportedFocusModes().contains(
                mFocusMode)) {
            parameters.setFocusMode(mFocusMode);
        } else {
            Log.i(TAG, "Camera focus mode: " + mFocusMode +
                " is not supported on this device.");
        }
    }

    // setting mFocusMode to the one set in the params
    mFocusMode = parameters.getFocusMode();

    if (mFlashMode != null) {
        if (parameters.getSupportedFlashModes().contains(
                mFlashMode)) {
            parameters.setFlashMode(mFlashMode);
        } else {
            Log.i(TAG, "Camera flash mode: " + mFlashMode +
                " is not supported on this device.");
        }
    }

    // setting mFlashMode to the one set in the params
    mFlashMode = parameters.getFlashMode();

    camera.setParameters(parameters);

    // Four frame buffers are needed for working with the camera:
    //
    //   one for the frame that is currently being executed upon in doing detection
    //   one for the next pending frame to process immediately upon completing detection
    //   two for the frames that the camera uses to populate future preview images
    camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));
    camera.addCallbackBuffer(createPreviewBuffer(mPreviewSize));

    return camera;
}