测光与聚焦区域
如果设备支持自动对焦,可以使用setFocusMode方法传入一个Camera.Parameters.FOCUS_MODE_*常量来指定对焦模式。根据不同设备的支持,使用getSupportedFocusMode方法找到可用的对焦模式。使用自动对焦可以使用AutoFocusCallback回调。
1 2 3 4 5 6 7 8 9 10
| Camera.Parameters parameters = camera.getParameters(); if(parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){ parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camer.autoFocus(new AutoFocusCallback(){ public void onAutoFocus(boolean success,Camera camera){ } }); }
|
getMaxNumFocusAreas方法来确定涉笔是否支持定义对焦区域。getMaxNumMeteringAreas来确定摄像头是否支持测光区域。
1 2 3 4 5 6 7 8 9 10 11
| if(params.getMaxNumMeteringAreas() > 0) { List<Camera.Area> meteringAreas = new ArrayList<Camera.Area>();
Rect areaRect1 = new Rect(-100,-100,100,100); meteringAreas.add(new Camera.Area(areaRect1,600)); Rect areaRect2 = new Rect(800,-1000,1000,-800); meteringAreas.add(new Camera.Area(areaRect2,400)); params.setMeteringAreas(meteringAreas); }
mCamera.setParameters(params);
|
Camera.Area对象包含两个参数:一个Rect对象指定了相机视图中的一个区域,还有一个宽度,告诉相机在测光或聚焦计算中此区域的重要程度。
Camera.Area对象的Rect描述了一个矩形区域在一个2000*2000个单元格组成的区域中的映射位置。坐标-1000,-1000表示左上角,1000,1000表示右下角。不会随变焦大小改变。
人脸识别
调用getMaxNumDetectedFaces()来检测是否支持面部检测特性
1 2 3 4 5 6 7 8
| class MyFaceDetectionoListener implements Camera.FaceDetectionListener { @Override public void onFaceDetection(Face[] faces,Camera camera) { if (faces.length > 0) { Log.d("FaceDetection","face detected:" + faces.length + "face 1 Location x:" + faces[0].rect.centerX() + "Y:" + faces[0].rect.centerY()); } } }
|