2016-04-26 23 views
0

Androidアプリでは、フォーカスモードがFOCUS_MODE_CONTINUOUS_PICTURE.に設定されています。Androidカメラのオートフォーカスがしばらくしてから動作を停止する

private Camera.AutoFocusCallback _cbAutoFocus = new Camera.AutoFocusCallback() { 

    private int _count = 0; 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     if (success) { 
      _count++; 
      if ((_count % 500) == 0) { 
       Log.d("MyCam Focus", Integer.toString(_count)); 
      } 
      _camera.cancelAutoFocus(); 
     } 
     _camera.autoFocus(_cbAutoFocus); 
    } 
}; 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

    try { 
     if (this._camera != null) { 
      this._camera.setPreviewDisplay(holder); 
      this._camera.startPreview(); 
      this._camera.autoFocus(this._cbAutoFocus); 
     } 
    }catch(Exception e) { 
     Log.e("Camera Surface change", e.getMessage()); 
    } 
} 

カメラを印刷したテキストの上に移動すると、しばらくの間、カメラが自動的に適切にフォーカスしているように見えます。しかし、しばらくするとフォーカスが止まり、onAutoFocusコードでは成功しません。誰かが洞察力を持っているかどうか分かります。よろしく。

答えて

0

FOCUS_MODE_CONTINUOUS_PICTUREまたはFOCUS_MODE_CONTINUOUS_VIDEOは、デバイスでサポートされていても常に機能するとは限りません。 FOCUS_MODE_AUTOを使用し、フォーカスが必要なときに手動でautofocus()を呼び出す方が良いようです。

0

あなたはAPI documentationでこれを見ました:?

アプリケーションは、このモードでは、オートフォーカス(AutoFocusCallback)を呼び出すことができます。 オートフォーカスがスキャンの途中である場合、フォーカスコールバックは完了すると に戻ります。オートフォーカスがスキャンでない場合、 コールバックは、 フォーカスがシャープかどうかを示すブール値ですぐに戻ります。アプリは、 をすぐに撮影するか、フォーカスモードをautoに変更するかを決定し、 フルオートフォーカスサイクルを実行することができます。 autoFocusコールの後にフォーカス位置がロックされます。アプリケーションが連続フォーカスを再開したい場合は、 cancelAutoFocusを呼び出す必要があります。プレビューを再起動しても、連続オートフォーカス は再開しません。連続的なピントを止めるには、アプリケーション がフォーカスモードを他のモードに変更する必要があります。

autoFocusメソッドが呼び出されると、オートフォーカスがロックされているようです。 cancelAutoFocusに自動焦点を再開してください。

onAutoFocusでは、メソッドの最後(成功とは無関係)に、autoFocusが呼び出され、それ以上のカメラの動きに関係なくフォーカスがロックされます。これは意図的ですか?

+0

私がautofocus()をもう一度呼び出さないと、最初の実行後にコールバックが呼び出されることはありません。 – Peter

関連する問題