现在我已经和这个功能打了几天了
看来,该相机是忽略(?)我定义的焦点区域。这是代码片段:
聚焦:
protected void focusOnTouch(MotionEvent event) {
if (camera != null) {
Rect rect = calculateFocusArea(event.getX(), event.getY());
Parameters parameters = camera.getParameters();
parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
parameters.setFocusAreas(Lists.newArrayList(new Camera.Area(rect, 500)));
camera.setParameters(parameters);
camera.autoFocus(this);
}
}
对焦区域计算:
private Rect calculateFocusArea(float x, float y) {
int left = clamp(Float.valueOf((x / getSurfaceView().getWidth()) * 2000 - 1000).intValue(), focusAreaSize);
int top = clamp(Float.valueOf((y / getSurfaceView().getHeight()) * 2000 - 1000).intValue(), focusAreaSize);
return new Rect(left, top, left + focusAreaSize, top + focusAreaSize);
}
来自Camera.AutoFocusCallback#onAutoFocus的几个日志事件
Log.d(TAG,String.format(“Auto focus success =%s。Focus mode:’%s’。Focus on:%s”,
专注,
camera.getParameters()。getFocusMode(),
camera.getParameters()。getFocusAreas()。get(0).rect.toString()));
08-27 11:19:42.240: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-109, 643 - -13, 739)
08-27 11:19:55.514: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(20, 457 - 116, 553)
08-27 11:19:58.037: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-159, 536 - -63, 632)
08-27 11:20:00.129: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-28, 577 - 68, 673)
视觉上看起来焦点成功地记录在记录区域,但突然之间它失去了焦点并集中在中心(0,0),或者获得了更大部分的SurfaceView。
在计算中使用的focusAreaSize约为210px(96dp)。
在HTC One上测试Camera.getParameters()。getMaxNumFocusAreas()为1。
初始对焦模式(第一次点击之前)设置为FOCUS_MODE_CONTINUOUS_PICTURE。
我在这里做错了吗?
修改相机。区域矩形尺寸或重量不显示任何明显的效果。