Android el enfoque de la Cámara en la Demanda

El incorporado en la Videocámara de la Aplicación (como el de la HTC EVO) parece llamar camera.autoFocus() sólo cuando la imagen de vista previa de los cambios. Si usted mantenga la cámara fija no camera.autoFocus() sucede.

Me gustaría duplicar este comportamiento, mientras que camera.startPreview() es activo como en la inicial de vista previa de configuración de código de abajo:

camera = camera.open();
Camera.Parameters parameters = camera.getParameters();
List<String> focusModes = parameters.getSupportedFocusModes();
if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
{
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();

Todos los ejemplos que he encontrado por autoFocus() parece estar llamando a cada 500ms a 2000ms, o una vez en el instante antes de que se tome la foto o grabación.

El EVO Videocámara aplicación parece de uso de un sensor o un algoritmo para desencadenar autoFocus(). Sin embargo, este autoFocus() gatillo de hecho funciona excepcionalmente bien. ¿Alguien tiene algún conocimiento de cómo accionar autoFocus() en la demanda, cuando es necesario, como cuando la cámara se mueve cerca o más lejos de la asignatura o se desplaza un poco?
Gracias,
Gerry

InformationsquelleAutor GerryL | 2011-05-04

5 Kommentare

  1. 23

    Android ha introducido el enfoque automático continuo desde la API de Nivel 9 (pan de Jengibre). Funciona mejor que llamar a la Cámara.enfoque automático periódicamente.

    • El enfoque automático continuo no es compatible con algunos dispositivos de HTC, incluso con la API >9. El uso de los parámetros.getSupportedFocusModes().contiene(de la Cámara.Los parámetros.FOCUS_MODE_CONTINUOUS_VIDEO) para comprobar si es compatible.
    • esto es cierto. Estoy desarrollando una API 15 de HTC y no el enfoque automático continuo!
    • Escrito a partir de 2018 – no, Android enfoque automático no funciona mejor que el sondeo de enfoque automático periódicamente en la mayoría de los dispositivos, especialmente en los objetos cercanos.
  2. 19

    Tuve el mismo problema en una de mis aplicaciones.

    Mi solución fue utilizar un sensor de oyente y hacer de enfoque automático cuando el usuario se sacudió el dispositivo a un cierto umbral. Aquí está el código.

    public void setCameraFocus(AutoFocusCallback autoFocus){
    if (mCamera.getParameters().getFocusMode().equals(mCamera.getParameters().FOCUS_MODE_AUTO) ||
            mCamera.getParameters().getFocusMode().equals(mCamera.getParameters().FOCUS_MODE_MACRO)){
        mCamera.autoFocus(autoFocus);
    }

    }

    La devolución de llamada para el enfoque automático:

    //this is the autofocus call back
    private AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){
    
        public void onAutoFocus(boolean autoFocusSuccess, Camera arg1) {
            //Wait.oneSec();
            mAutoFocus = true;
        }};

    Y la forma de llamar el enfoque.

    public void onSensorChanged(SensorEvent event) {
    
    if (mInvalidate == true){
        mView.invalidate();
        mInvalidate = false;
    }
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    if (!mInitialized){
        mLastX = x;
        mLastY = y;
        mLastZ = z;
        mInitialized = true;
    }
    float deltaX  = Math.abs(mLastX - x);
    float deltaY = Math.abs(mLastY - y);
    float deltaZ = Math.abs(mLastZ - z);
    
    if (deltaX > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing)
        mAutoFocus = false;
        mPreview.setCameraFocus(myAutoFocusCallback);
    }
    if (deltaY > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing)
        mAutoFocus = false;
        mPreview.setCameraFocus(myAutoFocusCallback);
    }
    if (deltaZ > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing) */
        mAutoFocus = false;
        mPreview.setCameraFocus(myAutoFocusCallback);
    }
    
    mLastX = x;
    mLastY = y;
    mLastZ = z;

    }

    Se puede ver el proyecto completo aquí: http://adblogcat.com/a-camera-preview-with-a-bounding-box-like-google-goggles/

    • if (mAutoFocus && (deltaX > .5 || deltaY > .5 || deltaZ > .5)) también haría muy bien
  3. 2

    Es muy posible llamar a un nuevo enfoque con una técnica más simple, si usted tiene un cuadro blanco, flash dentro de las cámaras de vista (desde el código, no es un verdadero cuadro) rápidamente llame a un cambio de dirección. Tengo el EVO 4G y uno de los carteles es correcta, no concentrarse continuamente sin la necesidad de cambiar lo que está mirando desde la actualización a Gingerbread.

  4. 2

    Para la toma de fotografías, se puede establecer este.

    Las aplicaciones pueden llamar autoFocus(AutoFocusCallback) en este modo. Si el enfoque automático está en el medio de la exploración, el enfoque de devolución de llamada de retorno cuando se complete. Si el enfoque automático no es la digitalización, el enfoque de devolución de llamada inmediatamente devolverá un booleano que indica si el enfoque es fuerte o no. Las aplicaciones pueden entonces decidir si quieren tomar una foto inmediatamente o para cambiar el modo de enfoque automático, y ejecutar un completo ciclo de enfoque automático.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea