java定焦点_Android 开发 Camera1_如何使用对焦功能
前言
Camera1的自動對焦還是有一些坑值得開一個篇幅來講解,一般對焦Mode有以下幾種:
Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO 連續自動對焦視頻
Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE? 連續自動對焦圖像
Camera.Parameters.FOCUS_MODE_AUTO 自動對焦(單次)
檢查支持的對焦Mode
有些時候前攝像頭不支持一些對焦模式,所以我們在切換攝像頭后配置攝像就需要檢查一遍支持的對焦模式
List focusModeList =parameters.getSupportedFocusModes();
for (String focusMode : focusModeList){//檢查支持的對焦
if(focusMode.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)){
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}else if(focusMode.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
}
FLASH_MODE_AUTO設置自動對焦Mode
其他對焦模式并沒有上面好說的使用后會一直自動對焦,但是FLASH_MODE_AUTO對焦比較獨特,它其實調用一次才觸發一次的對焦.
Camera.Parameters parameters =mCamera.getParameters();
parameters.setFocusMode(Camera.Parameters.FLASH_MODE_AUTO);//對焦設置為自動//其他參數配置略...
mCamera.setParameters(parameters);//添加參數
很簡單在配置Camera1的時候調用setFocusMode(Camera.Parameters.FLASH_MODE_AUTO) 實現自動對焦
啟用自動對焦
在上面將對焦設置為自動模式后,并不是真的就自動對焦(自動對焦的意思其實是當前屏幕中心的畫面自動對焦),所以我們需要觸發一次對焦.
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
mCamera.autoFocus(newCamera.AutoFocusCallback() {
@Overridepublic void onAutoFocus(booleansuccess, Camera camera) {
}
});
注意!對焦是需要在預覽開始之后才能調用的,否則報錯.以上設置一次autoFocus 就等于對焦一次.注意!是只對焦一次! 它不是一直在對焦!
FLASH_MODE_AUTO實現主動對焦和被動對焦的思路
被動對焦的思路
被動對焦的思路很簡單,用一個Button或者點擊預覽View進行一次對焦,所以,正常開發的情況下,需要使用一個布爾值來判斷當前是不是在預覽狀態.
主動對焦
也很簡單寫一個Handler循環就行了,我下面的例子就是每隔2秒對焦一次
private Handler mHandler = newHandler(){
@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what){case 0x01:
mCamera.autoFocus(newCamera.AutoFocusCallback() {
@Overridepublic void onAutoFocus(booleansuccess, Camera camera) {
}
});
mHandler.sendEmptyMessageDelayed(0x01,2*1000);break;default:break;
}
}
mTextureview.setSurfaceTextureListener(newTextureView.SurfaceTextureListener() {
@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surface, int width, intheight) {
initCamera();
initCameraConfig();try{
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
mHandler.sendEmptyMessage(0x01);
}catch(IOException e) {
e.printStackTrace();
}
}
@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, intheight) {
}
@Overridepublic booleanonSurfaceTextureDestroyed(SurfaceTexture surface) {return false;
}
@Overridepublic voidonSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
總結
以上是生活随笔為你收集整理的java定焦点_Android 开发 Camera1_如何使用对焦功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 线程分配_Java多线程原子引
- 下一篇: 华硕F540U怎么装win7系统 华硕F