Monday, November 14, 2016

Camera預覽自動對焦


Camera Focus mode 必須透過 setParameters() 設定,自動對焦則有三種模式:

  1. FOCUS_MODE_CONTINUOUS_PICTURE
  2. FOCUS_MODE_CONTINUOUS_VIDEO
  3. FOCUS_MODE_AUTO


FOCUS_MODE_CONTINUOUS_PICTURE (API level 14)
針對照相的連續自動對焦模式。
The speed of focus change is more aggressive than 
FOCUS_MODE_CONTINUOUS_VIDEO (API level 9)
針對錄影的連續自動對焦模式。

APP 仍然可以呼叫 takePicture() 但不保證對焦已完成。
FOCUS_MODE_AUTO (API level 5)
APP 需要自己呼叫 autoFocus(AutoFocusCallback) 才會執行自動對焦。
由於我是針對 Android 2.3 所寫的,所以不支援
 FOCUS_MODE_CONTINUOUS_PICTURE。

在 Android 4.0 以上的版本
FOCUS_MODE_CONTINUOUS_PICTURE
 FOCUS_MODE_CONTINUOUS_VIDEO
模式下,APP 可以呼叫 autoFocus(AutoFocusCallback),藉此可以得知是否對焦已完成。


code:

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
Camera.Parameters parameters = myCamera.getParameters();//獲取Camera.Parameters的實例
myCamera.startPreview();
Log.d(TAG, format + "+" + width + "+" + height);

//Camera Focus mode 必須透過 setParameters() 設定,自動對焦則有三種模式
List<String> allFocus = parameters.getSupportedFocusModes();
if (allFocus.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);//设置聚焦模式
} else if (allFocus.contains(Camera.Parameters.FLASH_MODE_AUTO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//设置聚焦模式
}
myCamera.setParameters(parameters);// 设置Camera parameters
myCamera.startPreview();//開始捕獲並顯示幀
}
Reference:

http://jyhshin.pixnet.net/blog/post/44014522-android-camera-demo-part-2-%E8%87%AA%E5%8B%95%E5%B0%8D%E7%84%A6
http://blog.csdn.net/niu_gao/article/details/7782959
http://mjbb.iteye.com/blog/1018006

No comments:

Post a Comment